Windows 批处理脚本中带空格的路径名
在批处理脚本中,目录名中的空格有问题 我存储了一个基本目录,然后用它来创建子目录和文件,比如:Windows 批处理脚本中带空格的路径名,windows,batch-file,Windows,Batch File,在批处理脚本中,目录名中的空格有问题 我存储了一个基本目录,然后用它来创建子目录和文件,比如: set basepath=c:\some\path set logdir=%basepath%\log set logfile=%logdir%\test.log 但是某些服务器上的basepath中有空格。早些时候,我使用了dir/x来获取缩短的8.3名称,但是我遇到了一个服务器,它无法工作(显然有一些设置可以禁用它,我没有权限重新打开它)。所以现在我想弄明白这一点。我需要将文件名/目录连接到ba
set basepath=c:\some\path
set logdir=%basepath%\log
set logfile=%logdir%\test.log
但是某些服务器上的basepath中有空格。早些时候,我使用了dir/x
来获取缩短的8.3名称,但是我遇到了一个服务器,它无法工作(显然有一些设置可以禁用它,我没有权限重新打开它)。所以现在我想弄明白这一点。我需要将文件名/目录连接到basepath,其中可能有空格。我试着用双引号,但没用
在命令提示下,您可以使用双引号目录和非双引号目录的组合来执行类似于cd“some path”\with\spaces
。但这在批处理脚本中不起作用
有什么建议吗?只有在实际需要使用环境变量时,才在其周围加上双引号
set basepath=c:\some\path with spaces
set logdir=%basepath%\log
xcopy *.log "%logdir%"
然后将其引用为“%logdir%”
,它将扩展为“c:\some\path with spaces\log”
。这是因为set
将所有内容放在=
后面,除了在环境变量中包含尾随空格
set "basePath=c:\somewhere\over the rainbow"
set "logDir=%basePath%\logs"
set "logFile=%logDir%\kansas.log"
>> "%logFile%" echo This is a test
cd "%logDir%"
不要在变量值内插入引号(除非有必要)
在set
命令周围使用引号,以确保变量中不存储任何传统空格,并保护特殊字符
将引号放在使用变量的最终命令的正确位置。执行此操作时会出现什么错误?您应该能够在基本路径中包含空格,然后在上连接其余的。我错误地使用了双引号,例如
set basepath=“c:\some\path”
并连接到该路径。我得到的错误是“文件名、目录名或卷标语法不正确”。正如MC ND和Rob K在下面回答的那样,我应该重复引用最后一个命令,这个命令非常有效。如果设置
命令赋值的末尾有空格,它们将包含在变量的值中。您是正确的。我在想它把它修好了。我将编辑我的答案。