2017-02-21 132 views
0

我有一個簡單的.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腳本(文件名是當前硬編碼),然後如何調用下一個變量等,以便循環並處理目錄中的所有文件。

感謝您的時間和耐心!

回答

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中的路徑分隔符是\/用於指示開關。有時,但不總是,/被翻譯爲\ - 最好使用正確的字符。

+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