2017-04-12 133 views
1
@echo off 
setlocal EnableDelayedExpansion 

set "folder=C:\Test\Test01\Test02\Test03\Test04\!!Test05\Test06" 

md %folder%\Final 

echo %folder% 
pause 

這將在C:\Test\Test01\Test02\Test03\Test04\Test05\Test06\Final中創建。如何使用特殊字符在批處理文件中創建文件夾?

結果應該像C:\Test\Test01\Test02\Test03\Test04\!!Test05\Test06\Final

如何在批處理文件中使用特殊字符(!!Test05)製作文件夾?

回答

1

啓用delayed expansion,說明他們在字面上或擴大正常% - 變量時,感嘆號都將丟失。切換延遲擴展及與周圍!只有克服這種閱讀受影響的變量:如果刪除未使用的和不必要的二線

@echo off 
setlocal DisableDelayedExpansion 

rem // Delayed Expansion is disabled, so literal exclamation marks are maintained: 
set "folder=C:\Test\Test01\Test02\Test03\Test04\!!Test05\Test06" 

setlocal EnableDelayedExpansion 
rem /* Delayed Expansion is enabled, so do not expand variables with `%`, 
rem or you will lose exclamation marks: */ 
md "!folder!\Final" 
endlocal 

rem /* Delayed Expansion is disabled, variables can be expanded with `%`, 
rem without losing exclamation marks: */ 
echo "%folder%" 
endlocal 
1

爲此,因爲Windows對待!作爲一個特殊的角色,你將需要逃避它。 ^符號是一個轉義字符,如下所示:

@echo off 
setlocal EnableDelayedExpansion 

set "folder=C:\Test\Test01\Test02\Test03\Test04\^!^!Test05\Test06" 

md %folder%\Final 

echo %folder% 
pause 

應該正常工作。看看這裏:https://ss64.com/nt/syntax-esc.html

+0

感謝您的幫助 抱歉,它仍然無法正常工作。我的意思是文件夾名稱應該是「!! Test05」 –

+0

@SandeepPrasad如果您運行此行:md「C:\ Test \ Test01 \ Test02 \ Test03 \ Test04 \ ^!^!Test05 \ Test06 \ Final」 它是否適用於您? – Scheme

+0

謝謝,但我需要存儲在可靠 –

0

你的命令工作正常。 在Windows中不是特殊字符,但當您啓用延遲擴展時,會以特殊方式解釋它。

@Echo Off 
Set "folder=C:\Test\Test01\Test02\Test03\Test04\!!Test05\Test06" 
MD "%folder%\Final" 
Echo=%folder% 
Timeout -1 

默認情況下延遲擴展是關閉的,雖然這可以改變。如果您需要確保您的!被正確看到,那麼最安全的選擇是在您的特定代碼部分之前添加行SetLocal DisableDelayedExpansion

+0

非常感謝。 –

相關問題