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!
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!
Please also mark the comments that contributed to the solution of the article
Kommentar vom Moderator Biber am Nov 19, 2010 um 10:20:58 Uhr
Bereits gelösten Beitrag verschoben von "Tools & Utilities" nach "Batch & Shell".
Content-Key: 155346
Url: https://administrator.de/contentid/155346
Printed on: April 20, 2024 at 03:04 o'clock
10 Comments
Latest comment
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