2017-02-21 2 views
0

Ich habe eine einfache TXT-Datei (myfile.txt) mit den Namen der 300+ Dateien im selben Verzeichnis. Jede Zeile enthält den Namen einer Datei und jeder Dateinamen Leerzeichen enthält - so etwas wie:Stapel lesen Dateinamen als Variable und dann die Variable in einem anderen Batch-Prozess verwenden

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

ich Batch-Prozess will jede Datei ohne harte Kodierung jeden Dateinamen in meinem Haupt-Batch-Skript (process.bat).

Meine process.bat öffnet und verarbeitet einfach eine Datei (derzeit fest codiert) mit einer Befehlszeilen-App und speichert dann die verarbeitete Datei in einem anderen Verzeichnis, behält aber den ursprünglichen Dateinamen bei.

@echo off 

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

Ich muss irgendwie dynamisch „Dateinummer eins.txt“ ersetzen, mit einer Variablen (dh der Dateiname) von myfile.txt und dann schreiben die verarbeiteten Daten in eine neue Datei genau das gleiche wie das Original benannt Datei aber in einem Ordner namens "bearbeitet".

Um die Dateinamen aus MyText.txt las ich versucht:

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

aber process.bat hat nichts zu verarbeiten.

Ich habe nachgeschlagen, wie man Zeilen aus einer Textdatei in Variablen liest und ich denke, dass die Leerzeichen in den Dateinamen Probleme verursachen !?

Ich verstehe nicht, wo die Variablen gespeichert sind (ich vermute im Speicher?) Auch, wie rufe ich eine Variable von meinem Prozess.bat Skript (Dateinamen sind derzeit hart codiert) und dann wie Rufen Sie die nächste Variable usw. auf, sodass sie alle Dateien im Verzeichnis durchläuft und verarbeitet.

Vielen Dank für Ihre Zeit und Geduld!

Antwort

0

Versuchen

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

zitiert die metavariable die gesamte Zeichenfolge macht, einschließlich der Räume, ein einziges Token. Da Sie uns process.bat nicht gezeigt haben, raten wir leider.

In Ihrer process.bat Datei, dann würden Sie

brauchen
start "some windowtitle" prooftool -c "%~1" "\processed\%~1" 

start die erste Zeichenfolge in Anführungszeichen als Fenstertitel verwendet; Sie können dies zu einem leeren String machen, wenn Sie möchten, aber lassen Sie es nicht weg.

"%~1" bedeutet quote (the-first-parameter-stripped-of-quotes).

Pfadseparatoren in Winbatch sind \. / wird verwendet, um Schalter anzuzeigen. Manchmal, aber nicht immer, / wird in \ übersetzt - am besten, das richtige Zeichen zu verwenden.

+0

Danke. Ich habe das versucht, aber kein Glück. Ich habe meine Beschreibung ein wenig erweitert, um die process.bat – aperr

+0

Diese process.bat fast enthalten arbeitet @echo off setlocal disableDelayedExpansion für/f "tokens = *" %% A in (myfile.txt) tun Starten Sie "" prooftool -c "%% A" "C: \ Benutzer \ Pro \ Desktop \ batch \ processed \ %% A.txt“ aber nur die ersten paar Dateien verarbeitet und gespeichert Ich denke, es ist, weil es Schwierigkeiten hat, mit dem Schreiben der verarbeiteten Dateien auf der Festplatte halten -. Gibt es eine Möglichkeit, es zu verlangsamen andere nach unten als die myfile.txt in kleineren aufzuteilen Listen? Zusätzlich zu den korrekt verarbeitet Dateien, die ich einige 0kb Dateien bekommen gespeichert und es öffnet sich eine Menge cmd Fenster, aber dann scheint es zu verriegelt, und ich habe – aperr

+0

neu zu starten, ich denke, das Lesen und Schreiben auf dem gleichen Laufwerk den Engpass wurde. Ändern das write-Verzeichnis auf ein anderes laufwerk funktionierte und es verarbeitet nun alle dateien. vielen dank für ihre hilfe Magoo! – aperr

Verwandte Themen