2017-02-21 13 views
0

У меня есть простой .txt-файл (myfile.txt), содержащий имена 300+ файлов в том же каталоге. Каждая строка содержит имя одного файла и каждое имя файла содержит пробела - что-то вроде:batch читать имя файла как переменную, а затем использовать переменную в другом пакетном процессе

file number one.txt 
file number two.txt 
file number three.txt 
.... 
file number three hundred and twenty five.txt 

Я хочу пакетной обработку каждый файл без жесткого кодирования каждого имени файла в моем основном пакетном скрипте (process.bat).

My process.bat просто открывает и обрабатывает файл (в настоящее время жестко закодированный) с помощью приложения командной строки, а затем сохраняет обработанный файл в другой каталог, но сохраняет исходное имя файла.

@echo off 

setlocal enableextensions disabledelayedexpansionstart 
start prooftool -c "file number one.txt" "/processed/file number one.txt" 

мне как-то нужно динамически заменить «номер файла one.txt» с переменной (т.е. имя файла) из myfile.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 для/ф "токенов = *" %% A в (myfile.txt) делать start "" prooftool -c "%% A" "C: \ Users \ Per \ Desktop \ batch \ обработано \ %% A.txt " , но обрабатываются и сохраняются только первые несколько файлов. Я думаю, что это связано с тем, что у него есть проблемы с записью обработанных файлов на диск - есть ли способ замедлить его, кроме разделения myfile.txt на меньшие списки? В дополнение к правильно обработанным файлам я получаю файлы размером 0kb, и он открывает много cmd-окон, но затем он кажется заблокированным, и мне нужно перезагрузить – aperr

+0

. Я думаю, что чтение и запись на тот же диск были узким местом. каталог записи на другой диск работал, и теперь он обрабатывает все файлы. Большое спасибо за вашу помощь Magoo! – aperr

 Смежные вопросы

  • Нет связанных вопросов^_^