我有以下简单的批处理文件,用于重命名 *.txt 文件并删除前 x 个字符
@Echo Off
for %%i in ("*.txt") do (
set fname=%%i
echo %fname%
copy %fname% %fname:~9%
)
但是,它只处理最后一个文件?如果我有 4 个文件,最后一个文件也会被复制 4 次?
我需要做什么?
我有以下简单的批处理文件,用于重命名 *.txt 文件并删除前 x 个字符
@Echo Off
for %%i in ("*.txt") do (
set fname=%%i
echo %fname%
copy %fname% %fname:~9%
)
但是,它只处理最后一个文件?如果我有 4 个文件,最后一个文件也会被复制 4 次?
我需要做什么?
问题是 %var% 在第一次解析循环时被变量的值替换,并且在执行期间不会改变。
这是一个可以让您修复代码的演示:
@ECHO off&setlocal&CLS
ECHO Demonstrating the use of %%var%% IN a block
ECHO.
SET var=Original value
ECHO Before the block, %%var%%=%var%
FOR %%i IN (1 2 3) DO (
SET var=New value %%i
ECHO loop %%i : %%var%%=%var%
)
ECHO After the block, %%var%%=%var%
ECHO.
ECHO BECAUSE the block is first PARSED, then executed.
ECHO in the parsing process, %%var%% is replaced by its
ECHO value as it stood when the block was parsed - BEFORE execution
ECHO.
ECHO now try using a SETLOCAL ENABLEDELAYEDEXPANSION command first:
ECHO.
SETLOCAL ENABLEDELAYEDEXPANSION
SET var=Original value
ECHO Before the block, %%var%%=%var% and ^^!var^^!=!var!
FOR %%i IN (1 2 3) DO (
SET var=New value %%i
ECHO loop %%i : %%var%%=%var% BUT ^^!var^^!=!var!
)
ECHO After the block, %%var%%=%var% and ^^!var^^!=!var!
ECHO.
哦,这么多插入符号!一个不识字的兔子的天堂。
插入符号 ( ^
) “转义”后面的字符的特殊含义 - 除了%
被另一个%
So 转义 - 在行中
ECHO Before the block, %%var%%=%var%
回显的是“Before the block”,然后是一个单曲%
,文本var
,另一个单曲%
,=
和the value of var
SETLOCAL ENABLEDELAYEDEXPANSION
字符!
变成特殊字符后。所以
ECHO Before the block, %%var%%=%var% and ^^!var^^!=!var!
或者
ECHO loop %%i : %%var%%=%var% BUT ^^!var^^!=!var!
附加一个 single !
、 string var
、另一个 single!
和=
,the run-time value of var
因为在 PARSE 时,^^
被替换为,然后在 EXECUTION 时^
将结果^!
解释为文字!
。在!var!
PARSE 时保持不变,但被var
执行时的值替换。