Wie verschachtelte FOR-Schleifen in batch-Dateien
Ich habe einige code in das ich möchte an einem FOR
- Schleife zum verarbeiten eines Satzes von Dateien.
Als Teil der Behandlung einer Datei gibt es eine FOR /F
- Schleife, liest es und fügt Daten an eine andere Datei basierend auf dem Dateinamen.
Um der Lage sein, um die Ausgabe-Datei Namen habe, verzögerte Erweiterung von Umgebungsvariablen gesetzt, die auf.
Dies ist, was der code Aussehen sollte, wie ich ursprünglich beabsichtigte, es zu sein:
setlocal enabledelayedexpansion
for %%f in (DataFolder\*.Ext) do (
set POI=%%~f
set POI=!JbPOI:DataFolder\=!
set POI=!JbPOI:.Ext=!
for /f "tokens=1,2,3 delims=," %%a in ("%%~f") do (
set CX=%%a
set CY=%%b
set FN=%%c
echo !FN!,9,!CX!,!CY! >> "DataFolder\!POI!.tmp"
)
)
endlocal
Dieser code funktioniert nicht weil die variable %%a
, %%b
und %%c
nie erhalten, ein Wert, %%a
immer den gleichen Wert hat wie %%f
.
Las ich einige Artikel über dieses Problem, aber konnte nicht extrahieren, die eine Lösung von Sie, arbeitete.
Ich habe versucht, verschiedene Dinge, keines funktionierte so weit...
- Hinzugefügt dummy äußeren Schleife zu erstellen, die variable
%%a
durch%%j
explizit - innere
FOR
Schleife herausgenommen und machte es zu einem Unterprogramm - innere
FOR
Schleife herausgenommen und machte es zu einem separaten batch-Datei
Kann jemand mir bitte sagen, wie das gehen kann - oder muss - gelöst werden?
- Ich würde sagen die einfachste Lösung ist die Installation von Python und schreiben, ein kleines Python-Skript für Sie. Oder wirklich jede andere Sprache außer MS batch.
- wollen Sie zum Lesen der Inhalte der Datei
%%~f
oder Ihren Namen als string.Denn jetzt bist du es als string. - Die Datei %%f ist zu Lesen ... Wenn es behandelt wird wie ein string in dieser Art und Weise: das macht Sinn erklären, warum %%a hat immer tha gleiche Wert wie bei %%f". Ich werde noch einige Tests durchführen ...
- Die option usebackq haben die ganze Arbeit! Die innere Schleife war die Behandlung der zitierten Datei-name als string, statt eine Datei zu Lesen. Vielen Dank, npocmaka!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin mir nicht sicher, ob Sie möchten, um die Datei Lesen
"%%~f"
, aber ich denke, das ist, was Sie brauchen.useback
werdenusebackq
?Sorry, aber für den geposteten code, den ich nicht sehen die Notwendigkeit für eine verzögerte expansion. Alle benötigten Daten werden direkt abgerufen, aus der
for
ersetzbare ParameterWenn der wirkliche code beinhaltet so etwas nicht gepostet, vielleicht die Antwort von npocmaka besser passen in das problem.
%%~nf
zurückkehren wird nur der Dateiname ohne Pfad und ohne Erweiterung.