批处理脚本中包含空格的路径名

时间:2014-04-23 19:39:42

标签: windows batch-file

我在批处理脚本中的目录名中有空格问题。

我存储一个基目录,然后使用它来创建子目录和文件,如:

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之类的操作。但这在批处理脚本中不起作用。

有什么建议吗?

2 个答案:

答案 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所有放在= 之外, 包括尾随空格到环境变量中。