我在批处理脚本中的目录名中有空格问题。
我存储一个基目录,然后使用它来创建子目录和文件,如:
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
之类的操作。但这在批处理脚本中不起作用。
有什么建议吗?
答案 0 :(得分:1)
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
命令的引号确保变量中不存储任何附加空格并保护特殊字符。
将引号放在使用变量的最终命令中的正确位置。
答案 1 :(得分:0)
仅在需要实际使用时才在环境变量周围加上双引号。
set basepath=c:\some\path with spaces
set logdir=%basepath%\log
xcopy *.log "%logdir%"
然后将其引用为"%logdir%"
,它将扩展为"c:\some\path with spaces\log"
。这是有效的,因为set
将所有放在=
之外, 包括尾随空格到环境变量中。