`所以我只想创建一个简单的代码来测试。我的总体目标是能够进入特定文件夹,运行任务,然后当该任务完成后,移动到另一个文件夹并重复。
在编程时我真的很绿,所以请光临我。
@echo off
setlocal ENABLEDELAYEDEXPANSION
set vidx=0
for /F "tokens=*" %%A in (z:\desktop\cookieclean\test.txt) do (
SET /A vidx=!vidx! + 1
set var!vidx!=%%A
)
set var
echo %var!vidx!%
set /a vidx+=1
echo %var!vidx!%
endlocal
这是我正在处理的代码。我从网络上的其他地方复制了代码,并试图让它做我想做的事情。上面的代码只是我试图获取测试文件,将3行文本作为变量抛出,然后让它递增。
我确信这是一件非常简单的事情,但我一直试图让这个工作几个小时,我的新秀正在展示。
我正在尝试做的伪代码是
Input variables from text
Open folder containing files
Delete files that are older than X days
Move active folder to next folder in directory
Delete files that are older than X days
Loop
End
非常感谢任何帮助。对于任何可能非常简单的问题,我也要承担全部责任。谢谢
哦,我只是想尝试使用cmd行,如果这有助于回答我的问题。
答案 0 :(得分:0)
您的延迟和正常扩张已经逆转。您希望内部变量在外部变量之前展开:!var%vidx%!
循环中的SET / A语句有效,但您无需展开变量。这也可行:SET /A vidx=vidx + 1
,或者更好:SET /A vidx+=1
我也相信你显示结果的逻辑是不正确的。下面的代码应该有效。
@echo off
setlocal enableDelayedExpansion
set "vidx=0"
for /f "tokens=*" %%A in (z:\desktop\cookieclean\test.txt) do (
set /a vidx+=1
set "var!vidx!=%%A"
)
set var
set "cnt=vidx"
set "vidx=1"
:loop
if %vidx% leq %cnt% (
echo !var%vidx%!
set /a vidx+=1
goto :loop
)
endlocal
这是一种使用FOR / L而不是GOTO循环的更简单,更有效的方法。
@echo off
setlocal enableDelayedExpansion
set "vidx=0"
for /f "tokens=*" %%A in (z:\desktop\cookieclean\test.txt) do (
set /a vidx+=1
set "var!vidx!=%%A"
)
set var
for /l %%N in (1 1 %vidx%) do echo !var%%N!
endlocal