For loop 循环的CMD不包含set/a值

For loop 循环的CMD不包含set/a值,for-loop,cmd,set,For Loop,Cmd,Set,我不知道怎么解释,所以这里是代码 @echo off set test=0 for /f %%a in (textfile.txt) do ( rem loops five times(5 lines in textfile.txt) set /a test=test+1 rem Adds 1 to Test echo %%a rem Echo's correct line in file echo %test% rem Echo's whatever X was before the

我不知道怎么解释,所以这里是代码

@echo off
set test=0

for /f %%a in (textfile.txt) do (
rem loops five times(5 lines in textfile.txt)

set /a test=test+1
rem Adds 1 to Test

echo %%a
rem Echo's correct line in file

echo %test%
rem Echo's whatever X was before the loop

)

echo %test%
rem Displays the correct value of X

pause
这只是我发现问题的一个例子,txtfile.txt有5行,因此for循环运行5次,每次,test向它加1,/a显示正确的X值,但是for循环上的最后一个echo显示0,这是在循环之前test设置的值

直到循环完成,测试值才改变。。。有办法解决这个问题吗


这是我想要完成的,因为可能有一种更简单的方法:我想运行一个for循环,在一系列子文件夹中查找所有rtf,并将它们全部复制到一个新名称为1.rtf、2.rtf、3.rtf的all目录中,等等。我需要在传输中重命名它们的原因是它们都有相同的名称。

您可能需要使用延迟环境变量展开。参见CMD/?有关此方面的更多帮助:

/V:启用延迟环境 变量扩展使用!作为 定界符。例如,/V:ON将允许!瓦尔!扩大 执行时的变量var。var语法将扩展 变量 在输入时,这是一件完全不同的事情,当在FOR的内部时 循环

延迟环境变量展开 默认情况下未启用。你可以 启用或禁用延迟环境 一个特殊变量的变量展开式 使用/V:ON调用CMD.EXE or/V:关闭开关。您可以启用或 禁用所有的延迟扩展 在计算机上调用CMD.EXE 和/或用户登录会话(按设置) 下列任一项或两项 使用注册表中的REG_DWORD值 REGEDIT.EXE:

HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\DelayedExpansion
和/或

HKEY_CURRENT_USER\Software\Microsoft\Command Processor\DelayedExpansion
0x1
0x0
。用户 特定设置优先于 机器的设置。命令行 开关优先于 注册表设置

If延迟环境变量 如果启用了扩展,则 感叹号字符可用于 替代环境的价值 执行时的变量

这是对的

示例代码:

@echo off
setlocal enabledelayedexpansion
echo.
set numLines=0
echo examining file '%~f0'
echo.
rem loop N times, once for each line in the file
for /f %%a in (%~f0) do (

    rem add 1 to the numLines variable
    set /a numLines=!numLines!+1

    rem echo the first symbol from the line 
    echo line !numLines!: %%a
)

rem Display the number of lines in the file
echo.
echo The file '%~f0' has %numLines% lines.
echo.

pause
echo.
endlocal

只是想补充一点,利用延迟扩展的关键是使用!瓦尔!语法对%var%。据我所知,XP默认启用延迟扩展,您只需使用!引用var即可!。这解决了我的问题。在其他海报提到的帮助中发现:

使用启用延迟环境变量扩展!作为 定界符例如,/V:ON将允许!瓦尔!扩大 执行时变量var。var语法扩展变量 在输入时,这是一件完全不同的事情,当在FOR的内部时 循环


我忽略了这个问题!!一开始是位。

%%a
值传输到任何for循环变量如何?只是几个小时都做不到