从文本文件导入变量,变量不递增

时间:2013-01-28 21:30:27

标签: input batch-file cmd

`所以我只想创建一个简单的代码来测试。我的总体目标是能够进入特定文件夹,运行任务,然后当该任务完成后,移动到另一个文件夹并重复。

在编程时我真的很绿,所以请光临我。

@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行,如果这有助于回答我的问题。

1 个答案:

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