per Batch, Zeilen eine TXT-Datei in Variable verwenden (mit Zählschleife)
Hallo zusammen,
nachdem ich mich nun seit längerem hier durchgelesen habe, kann, muss oder besser möche ich nun selber mal etwas fragen.
Mein Problem ist, dass ich eine Batch schreiben will, welche automatisch alle Dateien eines bestimmten Types in einem bestimmten Ordner, nach Änderungsdatum sortiert und in eine Textdatei speichert (neuste ganz oben). Soweit auch überhaupt kein Problem.
Aus dieser Datei sollen dann je nach eingetragenen Wert die erste bis max. sechste Zeile ausgelesen werden und an eine Variable übergeben werden. Dieser Wert (z.b. in Zeile 1 "test.pdf") soll dann, in dem Ordner, umbenannt werden und zur Schleife zurückkehren, den Zähler erhöhen und die 2te Zeile übergeben und dies solange bis der Zähler mit der vorher festgelegten Variable %Datmeng% übereinstimmt.
Da ich selber gerne mit Batch "spiele" und auch schon einige Beiträge hier gelesen habe, ist auch schon eine kleiner mehrzeiler daraus geworden.
Leider funktioniert er nicht so wie er soll. Ich weiß, das es ein Problem in der For-Schleife gibt in Bezug auf die Variable %cnt%.
den nachfolgenen Code habe ich aus einem anderen Beitrag hier aus dem Forum übernommen (bisher auch mit gutem Ergebniss ) aber leider nicht zu 100% verstanden. Ich würde mich freuen, wenn mir das jemand erklären könnte, da ich es gerne verstehen würde (Ich will ja was lernen).
Hier der vollständige Batch:
Ich hoffe und bin zuversichtlich, dass ihr meine Fehler findet und bin auch ehrlich gespannt was für welche das sind.
Achso zum Schluss: Ich möchte nur Batch verwenden, da ich denke, das dies möglich ist.
Vielen Dank schonmal
MfG
Hesperus
nachdem ich mich nun seit längerem hier durchgelesen habe, kann, muss oder besser möche ich nun selber mal etwas fragen.
Mein Problem ist, dass ich eine Batch schreiben will, welche automatisch alle Dateien eines bestimmten Types in einem bestimmten Ordner, nach Änderungsdatum sortiert und in eine Textdatei speichert (neuste ganz oben). Soweit auch überhaupt kein Problem.
Aus dieser Datei sollen dann je nach eingetragenen Wert die erste bis max. sechste Zeile ausgelesen werden und an eine Variable übergeben werden. Dieser Wert (z.b. in Zeile 1 "test.pdf") soll dann, in dem Ordner, umbenannt werden und zur Schleife zurückkehren, den Zähler erhöhen und die 2te Zeile übergeben und dies solange bis der Zähler mit der vorher festgelegten Variable %Datmeng% übereinstimmt.
Da ich selber gerne mit Batch "spiele" und auch schon einige Beiträge hier gelesen habe, ist auch schon eine kleiner mehrzeiler daraus geworden.
Leider funktioniert er nicht so wie er soll. Ich weiß, das es ein Problem in der For-Schleife gibt in Bezug auf die Variable %cnt%.
den nachfolgenen Code habe ich aus einem anderen Beitrag hier aus dem Forum übernommen (bisher auch mit gutem Ergebniss ) aber leider nicht zu 100% verstanden. Ich würde mich freuen, wenn mir das jemand erklären könnte, da ich es gerne verstehen würde (Ich will ja was lernen).
Set /a "cnt=1"
Set /a "n=1"
for /F "Tokens=*" %%i in (%Pfad%\%server%\backupconfig.txt) do call :setvarFixLine %n% "%%i"
:setvarFixLine
If %cnt%==%1 Set "Var=%~2"
Hier der vollständige Batch:
set Pfad=D:\Testumgebung\BackupStart\Daten
set Server=Infos
set Endung=pdf
set /a Datmeng=6
:: Liste der zu verwendenden Dateien, sortiert, zuletzt geänderte zuerst
dir /o-d /b %Pfad%\%Server%\*.%Endung%>%Pfad%\%Server%\backupconfig.txt
{{comment_single_line_remark:1}}
:Start
Set /a "cnt=1"
Set /a "n=1"
for /F "Tokens=*" %%i in (%Pfad%\%server%\backupconfig.txt) do call {{comment_single_line_double_colon:1}} %n% "%%i"
Echo n-te Zeile, n=%n%: [%Var%]
goto Rname
{{comment_single_line_double_colon:1}}
If %cnt%==%1 Set "Var=%~2"
set /a "cnt+=1"
set /a "n+=1"
{{comment_single_line_double_colon:2}}
{{comment_single_line_remark:2}}
echo [%Var%]
if exist %Pfad%\%Server%\Backup_%cnt%.%Endung% goto 1 else goto 2
:2
rename %Pfad%\%Server%\%Var% Backup_%cnt%.%Endung%
echo Umbenennung erfolgreich beendet
if %cnt% equ %Datmeng% goto eof else goto 3
:1
rename %Pfad%\%Server%\Backup_%cnt%.%Endung% Backup_renamed_%cnt%_%date%.%Endung%
goto Rname
:eof
exit
Ich hoffe und bin zuversichtlich, dass ihr meine Fehler findet und bin auch ehrlich gespannt was für welche das sind.
Achso zum Schluss: Ich möchte nur Batch verwenden, da ich denke, das dies möglich ist.
Vielen Dank schonmal
MfG
Hesperus
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 74227
Url: https://administrator.de/contentid/74227
Ausgedruckt am: 24.11.2024 um 19:11 Uhr
8 Kommentare
Neuester Kommentar
Wen ich Dich richtig verstanden habe sollten diese Änderungen bewirken was du willst:
Als Erklärung:
Aus der Datei backupconfig.txt werden die Dateien nach einander ausgelesen und jeweils der Dateiname an :Rname übergeben. Dort wird, sollte der laufende Zähler %cnt% <= der Datenmenge sein, die Umbenennoperatinen in der Klammer durchgeführt, sonst einfach nur dir ganze klammer übersprungen. -> Es werden also nur die ersten Paar Dateien in der Liste verarbeitet, der Rest nicht.
Di eumbenennoperationen ansich habe ich ncith wesentlich verändert, nur etwas anders angeordnet um ein paar sprünge wegfallen zu lassen.
Die von dir Verwendete Sprungmarke 3 war überflüssig denke ich. Wofür %n% war kann ich dir auch ncith sagen, denn es wird ncith benötigt, jedenfalls wenn ich dich richtig verstanden habe was die Batch machen soll.
miniversum
set "Pfad=D:\Testumgebung\BackupStart\Daten"
set "Server=Infos"
set "Endung=pdf"
set Datmeng=6
:: Liste der zu verwendenden Dateien, sortiert, zuletzt geänderte zuerst
dir /o-d /b "%Pfad%\%Server%\*.%Endung%">"%Pfad%\%Server%\backupconfig.txt"
:: n-te Zeile in %var% speichern; n ist im Beispiel 1
:Start
Set cnt=1
for /F "Tokens=*" %%i in (%Pfad%\%server%\backupconfig.txt) do call :Rname "%%i"
goto:eof
:Rname
set Var=%1
if %cnt% leq %Datmeng% (
Echo n-te Zeile, cnt=%cnt%: [%Var%]
::Befehl zum automatischen Backup umbenennen
echo [%Var%]
if exist "%Pfad%\%Server%\Backup_%cnt%.%Endung%" (
rename "%Pfad%\%Server%\Backup_%cnt%.%Endung%" "Backup_renamed_%cnt%_%date%.%Endung%"
)
rename "%Pfad%\%Server%\%Var%" "Backup_%cnt%.%Endung%"
echo Umbenennung erfolgreich beendet
Set /a cnt=%cnt%+1
)
Aus der Datei backupconfig.txt werden die Dateien nach einander ausgelesen und jeweils der Dateiname an :Rname übergeben. Dort wird, sollte der laufende Zähler %cnt% <= der Datenmenge sein, die Umbenennoperatinen in der Klammer durchgeführt, sonst einfach nur dir ganze klammer übersprungen. -> Es werden also nur die ersten Paar Dateien in der Liste verarbeitet, der Rest nicht.
Di eumbenennoperationen ansich habe ich ncith wesentlich verändert, nur etwas anders angeordnet um ein paar sprünge wegfallen zu lassen.
Die von dir Verwendete Sprungmarke 3 war überflüssig denke ich. Wofür %n% war kann ich dir auch ncith sagen, denn es wird ncith benötigt, jedenfalls wenn ich dich richtig verstanden habe was die Batch machen soll.
miniversum
Tut mir leid aber ichverstehe die Problematik nicht ganz. Kannst du denmal ein konkretes beispielmachen was passieren wollte udn was wirklich Passiert?
Tokens gibt an welche Elemente der Zeile die For gerate verarbeitet benutzt werden. Im prinzip könntest dudie auch weglassen hier. Wenn dus genau wissen wilslt gib mal am cmd
miniversum
Tokens gibt an welche Elemente der Zeile die For gerate verarbeitet benutzt werden. Im prinzip könntest dudie auch weglassen hier. Wenn dus genau wissen wilslt gib mal am cmd
For /?
ein. Dort ist es eigentlich gut erklärt und auch Beispiele zu finden.miniversum
Warum verschiebst du nicht grundsätzlich alle Dateien in einen Neuen Ordner mit Datum und machst dann das backup? nach dem verschieben ist der Ordner immer leer, die alten Dateien sind in nem unterordner oder wo anders halt mit Datum und die aktuellen Dateien sind da.
Oder steh ich jetzt aufm Schlauch?
Sonst würd ich die Zeile so einfügen:
Oder steh ich jetzt aufm Schlauch?
Sonst würd ich die Zeile so einfügen:
set "Pfad=D:\Testumgebung\BackupStart\Daten"
set "Server=Infos"
set "Endung=pdf"
set Datmeng=6
:: Liste der zu verwendenden Dateien, sortiert, zuletzt geänderte zuerst
dir /o-d /b "%Pfad%\%Server%\*.%Endung%">"%Pfad%\%Server%\backupconfig.txt"
:: n-te Zeile in %var% speichern; n ist im Beispiel 1
:Start
Set cnt=1
for /F "Tokens=*" %%i in (%Pfad%\%server%\backupconfig.txt) do call :Rname "%%i"
goto:eof
:Rname
set Var=%1
if %Var%==Backup_%cnt%.%Endung% goto:eof
if %cnt% leq %Datmeng% (
Echo n-te Zeile, cnt=%cnt%: [%Var%]
::Befehl zum automatischen Backup umbenennen
echo [%Var%]
if exist "%Pfad%\%Server%\Backup_%cnt%.%Endung%" (
rename "%Pfad%\%Server%\Backup_%cnt%.%Endung%" "Backup_renamed_%cnt%_%date%.%Endung%"
)
rename "%Pfad%\%Server%\%Var%" "Backup_%cnt%.%Endung%"
echo Umbenennung erfolgreich beendet
Set /a cnt=%cnt%+1
)