如何在批处理文件中使用特殊字符制作文件夹?

时间:2017-04-12 00:45:03

标签: batch-file cmd

@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)在批处理文件中创建文件夹?

3 个答案:

答案 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