@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
)在批处理文件中创建文件夹?
答案 0 :(得分:1)
为此,因为窗户对待!作为一个特殊角色,你需要逃脱它。 ^符号是一个转义字符,所以类似于:
@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
答案 1 :(得分: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
答案 2 :(得分:0)
如果删除未使用和不需要的第二行,您的命令可以正常工作。 !不是Windows中的特殊字符,但在启用延迟扩展后会以特殊方式进行解释。
@Echo Off
Set "folder=C:\Test\Test01\Test02\Test03\Test04\!!Test05\Test06"
MD "%folder%\Final"
Echo=%folder%
Timeout -1
默认情况下,延迟扩展功能已关闭,但可以更改。如果您需要确保正确地看到 !
,那么最安全的选择是在特定代码部分之前添加行SetLocal DisableDelayedExpansion
。