Batch - Hilfe bei FOR-Schleife
Hallo,
aus einer Access-Datenbank heraus rufe ich per VBA den u.a. Batch mit den Parametern: Reports!UB_System!Pfad ("C:\Users\User\Documents\Polar\") und Reports!UB_Polar!hrmexport1 ("20151101_230M") auf:
Shell Reports!UB_System!Pfad & "\HRMSystem\hrm-export.bat" & " " & Reports!UB_System!Pfad & " " & Reports!UB_Polar!hrmexport1
Mit dem Batch wird dann z.B. der folgende Datensatz (aus der Datei: HRM.txt) übergeben und weiter verarbeitet:
20151101;10:33;02:38;77 205 90 0;13
Das funktioniert auch alles perfekt. Allerdings nur wenn ein Datensatz übergeben wird.
Nun möchte ich aber gerne auch mehr als einen Datensatz durch den Batch nacheinander verarbeiten lassen. Das sähe dann z.B. so aus:
20151101;10:33;02:38;77 205 90 0;13
20151103;06:43;01:20;77 127 90 0;31
20151104;07:14;01:22;77 286 90 0;12
20151105;17:18;01:20;77 294 90 0;0
...
Der Inhalt der Batch-Datei: hrm-export.bat sieht zur Zeit, wie folgt aus:
echo off & setlocal
set "HRM=%1\HRM\HRM.txt"
set "ExportHRM=%1\HRM\%2.hrm"
set /a i=0
:start1
if /I %i% GEQ %HRData1% goto :next1
set /a i=%i%+1
goto :start1
:next1
Ich denke einmal, dass ich dafür die ganze Batch-Prozedur um eine "Schleife" erweitert müsste. Nur bekomme ich das leider nicht so recht hin. Vielleicht kann mir ja jemand einen Tip geben..
Herzlichen Dank im Voraus und Gruß
Markus Roller
aus einer Access-Datenbank heraus rufe ich per VBA den u.a. Batch mit den Parametern: Reports!UB_System!Pfad ("C:\Users\User\Documents\Polar\") und Reports!UB_Polar!hrmexport1 ("20151101_230M") auf:
Shell Reports!UB_System!Pfad & "\HRMSystem\hrm-export.bat" & " " & Reports!UB_System!Pfad & " " & Reports!UB_Polar!hrmexport1
Mit dem Batch wird dann z.B. der folgende Datensatz (aus der Datei: HRM.txt) übergeben und weiter verarbeitet:
20151101;10:33;02:38;77 205 90 0;13
Das funktioniert auch alles perfekt. Allerdings nur wenn ein Datensatz übergeben wird.
Nun möchte ich aber gerne auch mehr als einen Datensatz durch den Batch nacheinander verarbeiten lassen. Das sähe dann z.B. so aus:
20151101;10:33;02:38;77 205 90 0;13
20151103;06:43;01:20;77 127 90 0;31
20151104;07:14;01:22;77 286 90 0;12
20151105;17:18;01:20;77 294 90 0;0
...
Der Inhalt der Batch-Datei: hrm-export.bat sieht zur Zeit, wie folgt aus:
echo off & setlocal
set "HRM=%1\HRM\HRM.txt"
set "ExportHRM=%1\HRM\%2.hrm"
%ExportHRM% echo [Params]
for /f "tokens=5 delims=;" %%c in (%HRM%) do set HRData1=%%c%ExportHRM% (for /f "tokens=1 delims=;" %%a in (%HRM%) do echo Date=%%a)
%ExportHRM% (for /f "tokens=2 delims=;" %%a in (%HRM%) do echo StartTime=%%a)
%ExportHRM% (for /f "tokens=3 delims=;" %%a in (%HRM%) do echo Length=%%a)
%ExportHRM% echo [HRData]
%ExportHRM% (for /f "tokens=2 delims=;" %%a in (%HRM%) do echo StartTime=%%a)
%ExportHRM% (for /f "tokens=3 delims=;" %%a in (%HRM%) do echo Length=%%a)
%ExportHRM% echo [HRData]
set /a i=0
:start1
if /I %i% GEQ %HRData1% goto :next1
set /a i=%i%+1
%ExportHRM% (for /f "tokens=4 delims=;" %%a in (%HRM%) do echo %%a)
:next1
Ich denke einmal, dass ich dafür die ganze Batch-Prozedur um eine "Schleife" erweitert müsste. Nur bekomme ich das leider nicht so recht hin. Vielleicht kann mir ja jemand einen Tip geben..
Herzlichen Dank im Voraus und Gruß
Markus Roller
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 353456
Url: https://administrator.de/contentid/353456
Ausgedruckt am: 26.11.2024 um 11:11 Uhr
8 Kommentare
Neuester Kommentar
Na dann. Z.b so
Werte zeilenweise in eine Datei schreiben.
Schleifen- Batch-Datei Liest die wertedatei zeilenweise aus und ruft dann die umformatierungsbatch auf. Müsste auch in einer Datei gehen, wäre aber so als sofortlösung strukturierter, da Du deinen funktionierenden Code nicht ändern müssts.
lcer
Werte zeilenweise in eine Datei schreiben.
Schleifen- Batch-Datei Liest die wertedatei zeilenweise aus und ruft dann die umformatierungsbatch auf. Müsste auch in einer Datei gehen, wäre aber so als sofortlösung strukturierter, da Du deinen funktionierenden Code nicht ändern müssts.
lcer
Moin makroll10,
versuche es mit diesem Schnipsel (Arbeitstitel: "hrm-export-all.cmd")
Grüße
Biber
versuche es mit diesem Schnipsel (Arbeitstitel: "hrm-export-all.cmd")
@echo off & setlocal
set "ImportHRM=%1\HRM\HRM.txt"
set "ExportHRM=%1\HRM\%2.hrm"
:: Initial Export-Datei neu anlegen
>%ExportHRM% echo.
:: Importdatei einlesen und zeilenweise verarbeiten
FOR /f "delims=" %%f in (%ImportHRM%) do call :process_1Line "%%f"
goto :eof
:: Ende des Batches
:Process_1Line
>>%ExportHRM% (for /f "tokens=1-5 delims=;" %%a in (%*) do (
echo [Params]
echo Date=%%a
echo StartTime=%%b
echo Length=%%c
echo [HRData]
for /L %%x in (0,1,%%e) do echo %%d
)
)
goto :eof
::Ende von Process_1Line
Grüße
Biber
Biber
... und ich dachte, beim selbst-code-basteln lernt man am meisten.
@makroll10
::Kommentare im Programmcode können echt erhellend sein
Grüße
lcer
Moin makroll10,
na ja, sogar bei irgendwelchen Mini- und Mikro-Codeschipseln gibt es schon gewisse Gepflogenheiten, die einzuhalten sind.
So sollte ja zum Beispiel ein (rekonstruierbarer) Zusammenhang bestehen zwischen meinetwegen der Zeile 14 in der (Import-)Datei HRM.txt und dem daraus zu erzeugenden Dateinamen "20151108_230M".
Aus irgendeinem Parameter %2 wird da nix kommen, es sei denn, du willst doch wieder für jede zu erzeugende Datei einen Aufruf über Access machen.
Aber auch dann müste ja Access "wissen", das der Export "20151108_230M" aus Zeile 14 der HRM.txt erzeugt werden soll.
Ich dachte, du wolltest irgendwas automatisieren?
Also:
a) Ist der Name der Exportdatei ableitbar aus dem Inhalt der einzelnen Zeile in HRM.Txt?
b) Wer brät denn diese HRM.txt-Datei zusammen? Fall das auch Access macht, dann könnte doch an gleicher Stelle so ein Exportformat erzeugt werden.
Bitte spendier uns mal zwei, drei erläuternde Sätze zu diesem Prozess, den du da unterstützen willst.
Grüße
Biber
na ja, sogar bei irgendwelchen Mini- und Mikro-Codeschipseln gibt es schon gewisse Gepflogenheiten, die einzuhalten sind.
So sollte ja zum Beispiel ein (rekonstruierbarer) Zusammenhang bestehen zwischen meinetwegen der Zeile 14 in der (Import-)Datei HRM.txt und dem daraus zu erzeugenden Dateinamen "20151108_230M".
Aus irgendeinem Parameter %2 wird da nix kommen, es sei denn, du willst doch wieder für jede zu erzeugende Datei einen Aufruf über Access machen.
Aber auch dann müste ja Access "wissen", das der Export "20151108_230M" aus Zeile 14 der HRM.txt erzeugt werden soll.
Ich dachte, du wolltest irgendwas automatisieren?
Also:
a) Ist der Name der Exportdatei ableitbar aus dem Inhalt der einzelnen Zeile in HRM.Txt?
b) Wer brät denn diese HRM.txt-Datei zusammen? Fall das auch Access macht, dann könnte doch an gleicher Stelle so ein Exportformat erzeugt werden.
Bitte spendier uns mal zwei, drei erläuternde Sätze zu diesem Prozess, den du da unterstützen willst.
Grüße
Biber