批量读取文件名作为变量,然后在另一个批处理过程中使用该变量

时间:2017-02-21 05:01:09

标签: windows batch-file

我有一个简单的.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脚本处理变量(文件名目前是硬编码的)然后如何调用下一个变量等,以便它循环并处理目录中的所有文件。

感谢您的时间和耐心!

1 个答案:

答案 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中的路径分隔符为\/用于表示交换机。有时(但并非总是如此)/被翻译为\ - 最好使用正确的字符。