在Windows 10 CMD中运行链式命令时,文件名,目录名或卷标语法不正确

问题描述 投票:0回答:3

我正在尝试使用1行命令运行一系列命令。这个例子中的顺序很简单

'cd \; mkdir C:\ Users \ Admin \ Documents \ test'

单独地,在命令提示符下,这些命令工作正常,但是当我尝试执行整个脚本时,它给了我一个错误The filename, directory name, or volume label syntax is incorrect

相同的命令序列在powershell中运行得很好,但在命令提示符下却没有

这可能有什么问题?

windows powershell cmd windows-10 prompt
3个回答
1
投票

使用&&只会在前一个命令成功时继续执行命令。如果该目录已存在,则MKDIR返回值1,而不是0

如果您希望后续命令运行,请使用&,无论上一个命令是成功还是失败。


1
投票

PowerShell和cmd是不同的,因此具有不同的语法。

cmd&&&conditional processing symbols

性格:&

语法:command1&command2

定义:用于在一个命令行上分隔多个命令。 Cmd.exe运行第一个命令,然后运行第二个命令。

性格:&&

语法:command1 && command2

定义:仅当符号前面的命令成功时,用于在&&后面运行命令。 Cmd.exe运行第一个命令,然后仅在第一个命令成功完成时运行第二个命令。

;是一个用于分隔参数的特殊字符

性格:;要么 ,

语法:command1 parameter1; parameter2

定义:用于分隔命令参数。

在PowerShell中,;是一个语句终止符。这经常用于在同一行上运行两个命令,就好像它们之间有一条新行一样。


0
投票

我建议首先阅读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条件和目录创建结果执行。

© www.soinside.com 2019 - 2024. All rights reserved.