我正在尝试使用1行命令运行一系列命令。这个例子中的顺序很简单
'cd \; mkdir C:\ Users \ Admin \ Documents \ test'
单独地,在命令提示符下,这些命令工作正常,但是当我尝试执行整个脚本时,它给了我一个错误The filename, directory name, or volume label syntax is incorrect
相同的命令序列在powershell中运行得很好,但在命令提示符下却没有
这可能有什么问题?
使用&&
只会在前一个命令成功时继续执行命令。如果该目录已存在,则MKDIR
返回值1
,而不是0
。
如果您希望后续命令运行,请使用&
,无论上一个命令是成功还是失败。
PowerShell和cmd
是不同的,因此具有不同的语法。
在cmd
,&
和&&
是conditional processing symbols。
性格:&
语法:command1&command2
定义:用于在一个命令行上分隔多个命令。 Cmd.exe运行第一个命令,然后运行第二个命令。
性格:&&
语法:command1 && command2
定义:仅当符号前面的命令成功时,用于在&&后面运行命令。 Cmd.exe运行第一个命令,然后仅在第一个命令成功完成时运行第二个命令。
;
是一个用于分隔参数的特殊字符
性格:;要么 ,
语法:command1 parameter1; parameter2
定义:用于分隔命令参数。
在PowerShell中,;
是一个语句终止符。这经常用于在同一行上运行两个命令,就好像它们之间有一条新行一样。
我建议首先阅读Single line with multiple commands using Windows batch file解释运算符&
和&&
以及||
,它们可以在批处理文件或Windows命令提示符中使用。
具有此示例的多个命令的右侧命令行是:
cd \ & mkdir "C:\Users\Admin\Documents\test" 2>nul
第一个命令cd \
将当前目录设置为当前驱动器的根目录,尽管这不是必需的。
第二个命令"C:\Users\Admin\Documents\test" 2>nul
创建整个目录树(默认情况下启用了命令扩展名)。如果发生错误,就像这个目录已经存在一样,命令MKDIR的退出代码是1
失败而不是0
成功。错误消息被2>nul
从句柄STDERR重定向到设备NUL以抑制它。
当然也有可能无法创建目录,因为使用的用户帐户没有创建此目录的权限,或者目录C:\Users\Admin\Documents
中已有名为test
的文件。出于这个原因,最好使用:
cd \ & ( if not exist "C:\Users\Admin\Documents\test\" mkdir "C:\Users\Admin\Documents\test" 2>nul ) & echo OK
更多命令可以附加&
,&&
或||
,如此处所示,echo OK
始终独立于IF条件和目录创建结果执行。