0

我的目标是能够进入一个特定的文件夹,运行一个任务,然后当该任务完成后,移动到另一个文件夹并重复。

@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 行。

4

1 回答 1

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
于 2013-01-28T23:02:03.203 回答