Windows CMD如何将参数传递给脚本并保存到其中一个参数的文件名

Windows CMD如何将参数传递给脚本并保存到其中一个参数的文件名,windows,command-line,cmd,dos,Windows,Command Line,Cmd,Dos,我想将以下参数传递给脚本: myscript.cmd "Foo" "Bar" "File" 其中,第三个参数应添加扩展名.log SET logFile = "%~3" + .log echo logFileName is "%logFile%" echo %date% %time% got parameters "%~1" "%~2" >> "%logFile%" 在本例中,它应该是File.log SET logFile = "%~3" + .log echo logFil

我想将以下参数传递给脚本:

myscript.cmd "Foo" "Bar" "File"
其中,第三个参数应添加扩展名
.log

SET logFile = "%~3" + .log
echo logFileName is "%logFile%"

echo %date% %time% got parameters "%~1" "%~2" >> "%logFile%"
在本例中,它应该是
File.log

SET logFile = "%~3" + .log
echo logFileName is "%logFile%"

echo %date% %time% got parameters "%~1" "%~2" >> "%logFile%"
应该与上面的脚本类似,但无法使其正常工作。有三个问题:引号(包含在变量的值中)、空格(变量名称中包含空格)和连接(批处理文件中没有连接运算符)

您已经定义了一个名为
logFile\uu
的变量,该变量的名称中有一个传统的空格(用下划线表示),并且指定的值是literal
\ufile+.log
(如前所述,下划线表示空格)

线路

SET logFile = "%~3" + .log
           ^ ^^   ^^^^  Unneeded/problematic characters
应该是

SET "logFile=%~3.log"

没有传统空格且引号不包含在值中,它们只是分隔赋值,以防止行尾出现特殊字符或传统空格问题

删除=周围的空格并删除无关的引号

SET logFile=%~3.log
echo logFileName is "%logFile%"

echo %date% %time% got parameters "%~1" "%~2" >> "%logFile%"
这对我很有用