cmd.exe /C 无法 运行 命令

cmd.exe /C unable to run the command

我正在 运行 宁下面的命令,如果我 运行 通过命令提示符手动

它工作成功
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.

这是我的命令 运行ning

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 发现了错误。

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

你不能这样做 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"

另见