我有一个简单的.txt文件(myfile.txt),其中包含同一目录中300多个文件的名称。每行包含一个文件的名称,每个文件名都有空格 - 如:
file number one.txt
file number two.txt
file number three.txt
....
file number three hundred and twenty five.txt
我想批处理每个文件而不对主批处理脚本(process.bat)中的每个文件名进行硬编码。
我的process.bat只是使用命令行应用程序打开并处理文件(当前是硬编码的),然后将处理后的文件保存到其他目录,但保留原始文件名。
@echo off
setlocal enableextensions disabledelayedexpansionstart
start prooftool -c "file number one.txt" "/processed/file number one.txt"
我不知何故需要用myfile.txt中的变量(即文件名)动态替换“file number one.txt”,然后将处理后的数据写入一个名为与原始文件完全相同的新文件,但是在名为“已处理”的文件夹。
要从mytext.txt中读取文件名,我试过:
for /F "tokens=*" %%A in (myfile.txt) do [process.bat] %%A
但是process.bat无需处理。
我已经查找了如何将文本文件中的行读入变量,我想也许文件名中的空格可能会导致问题!?
我不明白存储变量的位置(我在内存中假定?),如何调用我的process.bat脚本处理变量(文件名目前是硬编码的)然后如何调用下一个变量等,以便它循环并处理目录中的所有文件。
感谢您的时间和耐心!
答案 0 :(得分:0)
尝试
for /F "tokens=*" %%A in (myfile.txt) do [process.bat] "%%A"
引用metavariable
使整个字符串(包括空格)成为单个标记。由于您还没有向我们展示process.bat
,我们很遗憾地猜测。
在process.bat
文件中,您需要
start "some windowtitle" prooftool -c "%~1" "\processed\%~1"
start
使用第一个引用的字符串作为窗口标题;如果你愿意,你可以把它变成一个空字符串,但不要忽略它。
"%~1"
表示quote (the-first-parameter-stripped-of-quotes)
。
winbatch中的路径分隔符为\
。 /
用于表示交换机。有时(但并非总是如此)/
被翻译为\
- 最好使用正确的字符。