cmd.exe /C 无法运行命令

时间:2021-03-26 05:39:15

标签: windows batch-file cmd command-line

如果我通过命令提示符手动运行它,我正在运行成功的命令

SET filename=testfile_26032021.txt && SET newfilename=%filename:~9,8% && copy C:\test\updatedtestfile_%newfilename%.txt C:\test\updatedtestfile_%newfilename%.txt.temp

但是当我通过外部调用运行它时,出现错误

The system cannot find the file specified.

这是我正在运行的命令

cmd.exe /C SET filename=testfile_26032021.txt && SET newfilename=%filename:~9,8% && copy C:\test\updatedtestfile_%newfilename%.txt C:\test\updatedtestfile_%newfilename%.txt.temp

我通过将标志从 /C 更改为 /K 来发现错误。

知道这个命令有什么问题吗?

1 个答案:

答案 0 :(得分:2)

您不能这样做 SET filename=testfile_26032021.txt && SET newfilename=%filename:~9,8%,因为 %filename% 在解析时已扩展,但尚不可用。您必须 enable delayed expansion 并告诉 cmd 稍后使用 !variable_name! 扩展命令。除了 && 结束前一个命令,所以你的整个事情被解析为 3 个命令:

cmd.exe /C SET filename=testfile_26032021.txt
SET newfilename=%filename:~9,8%
copy C:\test\updatedtestfile_%newfilename%.txt C:\test\updatedtestfile_%newfilename%.txt.temp

所以你必须像这样引用命令

cmd.exe /V:on /C "SET "filename=testfile_26032021.txt" && SET "newfilename=!filename:~9,8!" && copy C:\test\updatedtestfile_!newfilename!.txt C:\test\updatedtestfile_!newfilename!.txt.temp"

cmd.exe /C "setlocal enabledelayedexpansion && SET filename=testfile_26032021.txt && SET newfilename=!filename:~9,8! && copy C:\test\updatedtestfile_!newfilename!.txt C:\test\updatedtestfile_!newfilename!.txt.temp"

另见