为何在forfiles命令中使用mv命令报错,替换为move却能正常运行?
为何在forfiles命令中使用mv命令报错,替换为move却能正常运行?
嗨,这个问题其实和Windows命令行的环境差异有关,我来给你捋清楚~
首先得明确两个命令的本质区别:
mv是类Unix系统(比如Linux、macOS)里的文件移动/重命名命令,Windows原生的CMD并没有内置这个命令。你平时在命令行里能正常用mv,大概率是因为你的系统装了Git Bash、WSL或者其他类Unix工具集,这些工具把mv.exe加到了系统环境变量的PATH里,所以直接在CMD窗口里能调用到它。- 而
move是Windows CMD的内置命令,不管是在你当前打开的CMD主窗口,还是通过forfiles启动的子进程里,都能被直接识别执行。
那为什么forfiles里用mv会报错呢?因为forfiles在执行cmd /c的时候,会启动一个干净的CMD子进程——这个子进程的环境变量PATH和你当前手动打开的CMD窗口不一样,它不会包含那些第三方工具的路径,自然就找不到mv.exe,于是就弹出了那个“'mv' is not recognized as an internal or external command...”的报错。
如果实在想用mv的话,你可以在命令里写mv的完整路径(比如C:\Program Files\Git\usr\bin\mv.exe,具体路径看你Git的安装位置),这样forfiles就能准确定位到它了,但显然直接用Windows原生的move命令会更省心~
备注:内容来源于stack exchange,提问作者Bones
相关产品推荐
相关产品推荐

