2014-04-23 92 views
0

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

我存储的基本目录,然后用它来制作的子目录和文件,是这样的:

set basepath=c:\some\path 
set logdir=%basepath%\log 
set logfile=%logdir%\test.log 

但基本路径某些服务器上有它的空间。之前我使用dir /x来缩短8.3的名字,但是我遇到了一个服务器,在这种情况下这不起作用(显然有一些设置可以禁用此功能,而我没有权限将其重新打开)。所以现在我试图弄清楚这一点。我需要连接文件名/目录到basepath,它可能有空格。我试着用双引号,但它没有奏效。

在命令提示符处,可以使用双引号目录和非双引号目录的组合执行诸如cd "some path"\with\spaces之类的操作。但是这在批处理脚本中不起作用。

有什么建议吗?

+1

当你这样做时,你会得到什么错误?你应该能够在basepath路径中有空格,然后连接其余部分。 – haxtbh

+0

我错误地使用了双引号,比如'set basepath =“c:\ some \ path”'并且连接到那个。我得到的错误是“文件名,目录名称或卷标语法不正确”。正如MC ND和Rob K在下面回答的,我应该双引用最后的命令,这很好用 – zako42

回答

0

只有当您需要实际使用环境变量时,才会使用双引号。

set basepath=c:\some\path with spaces 
set logdir=%basepath%\log 

xcopy *.log "%logdir%" 

然后引用它作为"%logdir%",它会扩大到"c:\some\path with spaces\log"。这样做的原因是set全部放入之后= 除了 包括后面的空格变成了环境变量。

+0

不是。如果'set'命令赋值的末尾有空格,则它们包含在变量的值中。 –

+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命令以确保没有附加空格存储在变量中并保护特殊字符。

将引号放在使用变量的最终命令中的正确位置。

相关问题