Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 批处理脚本中带空格的路径名_Windows_Batch File - Fatal编程技术网

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在下面回答的那样,我应该重复引用最后一个命令,这个命令非常有效。如果
设置
命令赋值的末尾有空格,它们将包含在变量的值中。您是正确的。我在想它把它修好了。我将编辑我的答案。