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

问题描述:

我有一个简单的.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的动态替换“文件编号此时就把one.txt存盘”与变量(即文件名),然后将处理后的数据写入到命名完全一样的原始一个新的文件文件,但在名为“已处理”的文件夹中。

来读取mytext.txt文件名我想:

for /F "tokens=*" %%A in (myfile.txt) do [process.bat] %%A 

但process.bat有没有要处理。

我已经看了如何从文本文件读取行到变量,我想也许在文件名称中的空间导致问题!?我不明白变量的存储位置(我假设在内存中?),我怎么调用一个变量来处理我的process.bat脚本(文件名是当前硬编码),然后如何调用下一个变量等,以便循环并处理目录中的所有文件。

感谢您的时间和耐心!

尝试

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中的路径分隔符是\/用于指示开关。有时,但不总是,/被翻译为\ - 最好使用正确的字符。

+0

谢谢。我尝试过,但没有运气。我已经扩大了我的描述有点包括process.bat – aperr

+0

这process.bat近工作 关闭@echo SETLOCAL disableDelayedExpansion FOR/F “令牌= *” %% A有(myfile.txt中)做开始“”prooftool -c“%% A”“C:\ Users \ Per \ Desktop \ batch \ processed \ %% A。txt“ 但是只处理和保存了前几个文件,我认为这是因为它难以跟上将处理过的文件写入磁盘 - 除了将myfile.txt分成更小列表? 除了正确处理的文件,我得到了一些0kb的文件保存,它打开很多cmd窗口,但它似乎锁定,我必须重新启动 – aperr

+0

我认为阅读和写入同一驱动器是瓶颈。写入另一个驱动器的目录工作,它现在处理所有文件。非常感谢您的帮助Magoo! – aperr