【发布时间】:2014-06-25 17:28:25
【问题描述】:
这是我在这里的第一篇文章,不幸的是,向您提问而不是帮助。
我正在编写一个小程序,当在文本文件中找到字符串时,它会移动文本和 pdf 文件。(1.txt,1.txt.pdf ...)当我批量手动设置变量时它工作得很好像这样:
set c1=xxx
set p1=c:\test\xxx\
set c2=yyy
set p2=c:\test\yyy\
FOR /f "tokens=*" %%A IN ('FINDSTR /i /m "%c1%" "c:\test\*.txt"') DO (
IF "%ERRORLEVEL%"=="0" MOVE %%A "%p1%">nul
MOVE %%A.pdf %p1%
FOR /f "tokens=*" %%A IN ('FINDSTR /i /m "%c2%" "c:\test\*.txt"') DO (
IF "%ERRORLEVEL%"=="0" MOVE %%A "%p2%">nul
MOVE %%A.pdf %p2%
现在我正在尝试使用带有变量的输入文件:
for /F "delims=^ tokens=1,2" %%A in (c:\test\db\input.cdb) do (
SET /A vidx=!vidx! + 1
set c!vidx!=%%A & set p!vidx!=%%B
效果很好,但是当我尝试对所有这些变量使用 for 循环时,问题就开始了。从字面上搜索所有 (c1,c2,c3...) 变量并将它们移动到 (p1,p2,p3,...) 路径。
Input.cdb 看起来像这样:
xxx ^ c:\test\xxx
yyy ^ c:\test\yyy
代码:
setlocal ENABLEDELAYEDEXPANSION
set vidx=0
for /F "delims=^ tokens=1,2" %%A in (c:\test\db\input.cdb) do (
SET /A vidx=!vidx! + 1
set c!vidx!=%%A & set p!vidx!=%%B
FOR /f "tokens=*" %%D IN ('FINDSTR /i /m "%c!vidx!%" "c:\test\*.txt"') DO (
IF "%ERRORLEVEL%"=="0" MOVE %%D "%p!vidx!%">nul
MOVE "%%D.pdf" "%p!vidx!%"
ECHO %%D File is being procesed now
)
)
我不知道为什么这段代码不起作用,可能是因为循环里面有循环? 或者如何创建循环以从 0 到从 input.cdb 读取了多少行变量?
我尝试使用临时变量在单独的 for 循环中运行它,但它仍然没有使用我的字符串和路径变量。
提前感谢您的帮助! 带着敬意 黑融合
【问题讨论】:
标签: variables batch-file for-loop batch-processing