Batch Frage - alle Dateien in einem Ordner einlesen ändern dann einmal kopieren und dann verschieben
Hallo Forum,
Ich weiß, daß mein Problem relativ trivial ist, allein mir fehlt der Durchblick.
Ich möchte Inventurdateien in einem Ordner einlesen, diese von Leerzeilen befreien und letztendlich
einmal in einen Sicherungsordner kopieren und zu guter Letzt in den eigentlichen Inventurordner verschieben.
So:
In einem Ordner A liegen Inventurdateien vom Namensformat sehen die wie folgt aus:
also zum Beispiel
Ich brauche eine Batchdatei die folgendes leistet:
?
Das Verzeichnis sollte nach dem Batchaufruf leer sein.
Das müsste mit einer Batch zu schaffen sein, aber mein Kopf meldet gerade permanent TILT zumal ich hier nebenher
noch vorweihnachtlichen Kundenverkehr habe...
Wer erbarmt sich und hilft mir in meiner Not?
Ich bin Euch ewig dankbar für sachdienliche Hinweise!
Ich weiß, daß mein Problem relativ trivial ist, allein mir fehlt der Durchblick.
Ich möchte Inventurdateien in einem Ordner einlesen, diese von Leerzeilen befreien und letztendlich
einmal in einen Sicherungsordner kopieren und zu guter Letzt in den eigentlichen Inventurordner verschieben.
So:
In einem Ordner A liegen Inventurdateien vom Namensformat sehen die wie folgt aus:
abteilunng.inventurnr.mde
schreibwaren.1052.mde
Ich brauche eine Batchdatei die folgendes leistet:
- Alle Dateien in Ordner A einlesen
- Die gefundenen Dateien von Leerzeilen befreien
findstr .$^ alter Name>neuer Name
- Die veränderten Dateien (die idealerweise noch immer ihren Dateinamen behalten haben) in einen Ordner B kopieren
- Und dann die veränderten Dateien in Ordner C verschieben.
Das Verzeichnis sollte nach dem Batchaufruf leer sein.
Das müsste mit einer Batch zu schaffen sein, aber mein Kopf meldet gerade permanent TILT zumal ich hier nebenher
noch vorweihnachtlichen Kundenverkehr habe...
Wer erbarmt sich und hilft mir in meiner Not?
Ich bin Euch ewig dankbar für sachdienliche Hinweise!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Kommentar vom Moderator Biber am 19.11.2010 um 11:20:58 Uhr
Bereits gelösten Beitrag verschoben von "Tools & Utilities" nach "Batch & Shell".
Content-ID: 155346
Url: https://administrator.de/forum/batch-frage-alle-dateien-in-einem-ordner-einlesen-aendern-dann-einmal-kopieren-und-dann-verschieben-155346.html
Ausgedruckt am: 16.05.2025 um 08:05 Uhr
10 Kommentare
Neuester Kommentar

Servus,
Außer du meinst eine zusätzliche Zeile 3 - die da sinngemäß:
Sollte aber auch zu lösen sein...
Wobeiich das Forum mal wieder ein Problem mit [AltGr] [9][2] habe
Gruß
- Alle Dateien in Ordner A einlesen
- Die gefundenen Dateien von Leerzeilen befreien
- Die veränderten Dateien (die idealerweise noch immer ihren Dateinamen behalten haben) in einen Ordner B kopieren
for /f %%a in ('dir /b C:pfad1*.mde') do (
for /f %%l in (%%a) do if not "%%l"=="" echo %%l>>C:pfad2\%%a
)
- Und dann die veränderten Dateien in Ordner C verschieben.
Außer du meinst eine zusätzliche Zeile 3 - die da sinngemäß:
copy C:pfad1\%%a C:pfad2\%%a
lauten soll....Sollte aber auch zu lösen sein...
Wobei
Gruß
ich habe hier die ungetestete powershell version:
gruß michael
# **************************************************************
# einmal auf der powershell ausgeführt werden
# "Set-ExecutionPolicy Unrestricted"
# **************************************************************
#
# **************************************************************
# * Erstellt M.N. - POWERSHELL / Entwicklung 18.11.2010 *
# **************************************************************
$QUELLE = "c:Temp"
$ZIEL = "c:\Temp2010"
$ZIEL2 = "c:\Temp2010\11"
$FILE = Get-ChildItem $QUELLE -filter '*.txt'
foreach ( $i in $FILE ) {
$TEXT = Get-Content "$QUELLE\$i" | Out-String
$TEXT2 = $TEXT -replace '\s\B','' #| Out-String
Move-Item -path "$QUELLE\$i" -destination "$ZIEL\$i"
$TEXT2 > "$ZIEL2\$i"
}
gruß michael
und hier die getestet powershell version:
gruß michael
# **************************************************************
# einmal auf der powershell ausgeführt werden
# "Set-ExecutionPolicy Unrestricted"
# **************************************************************
#
# **************************************************************
# * Erstellt M.N. - POWERSHELL / Entwicklung 18.11.2010 *
# **************************************************************
$QUELLE = "c:\Temp"
$ZIEL = "c:\Temp2010"
$ZIEL2 = "c:\Temp2010\11"
$FILE = Get-ChildItem $QUELLE -filter '*.txt'
foreach ( $i in $FILE ) {
$TEXT = Get-Content "$QUELLE\$i"
$TEXT2 = $TEXT | Where-Object { $_ -ne "" }
Move-Item -path "$QUELLE\$i" -destination "$ZIEL\$i"
$TEXT2 > "$ZIEL2\$i"
}
gruß michael
Hallo tulekparson!
...
Schleife, um alle *.mde-Dateien durchzugehen - diese stehen innerhalb der Schleife als "%%a" zur Verfügung.
Mit "^" für "Zeilenbeginn und "$" für Zeilenende (und nix dazwischen) lassen sich die Leerzeilen in der Datei "%%a" finden und per "/v" ausfiltern (ähnelt damit Deinem Ansatz).
Das Ergebnis wird (per Ausgabeumleitung mit "
Die im "Pfad2" neu erstellte Datei enthält jetzt keine Leerzeilen mehr und kann daher (unter dem gleichen Namen, daher genügt die Angabe des Pfades) in den "Pfad3" kopiert werden (wobei die Meldung "
Wenn der Kopiervorgang ohne Fehler endet (deshalb die bedingte Verknüpfung mit "
Ende der Schleife 
Grüße
bastla
Kann mir das mal jemand übersetzen?
Für die paar Zeilen habe ich auch selbst Zeit for %%a in ("C:\Pfad1\*.mde") do (
findstr /v "^$" "%%a">"C:\Pfad2\%%~nxa"
Das Ergebnis wird (per Ausgabeumleitung mit "
>
") in eine neue Datei geschrieben, wobei Dateiname und - extension von der ursprünglichen Datei übernommen werden (Näheres dazu findest Du am Ende der Online-Hilfe ("for /?
"). copy "C:\Pfad2\%%~nxa" "C:\Pfad3">nul && del "%%a"
1 Datei(en) kopiert.
" ja nicht wirklich so aussagekräftig ist, dass sie auch ausgegeben werden müsste - daher: weg damit in Richtung "nul"-Device).Wenn der Kopiervorgang ohne Fehler endet (deshalb die bedingte Verknüpfung mit "
&&
" anstelle von "&
") kann die Originaldatei gelöscht werden.)
Grüße
bastla