2014-04-23 91 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命令以確保沒有附加空格存儲在變量中並保護特殊字符。

將引號放在使用變量的最終命令中的正確位置。

相關問題