Windows Batch Scripting
Hallo zusammen,
ich habe vor 20 Jahren zu letzt was mit Windows Batch Sripting gemacht und suche schon seit einiger Zeit nach einer Lösung für folgendes Problem:
Ich habe verschiedene Dateien, wie z. B. CMD_12345678_1.txt oder CMD_87654321_1.txt oder CMD_67890123_1.txt in einem Ordner.
Das einzig greibare der Datei wäre die Zahlen in der MItte, die sich nicht ändern. Ich kann also nur den Namensstring der Datei auslesen und mit den Zahlen vergleichen.
Jetzt möchte die Datei, CMD_12345678_1.txt in Ordner 1 kopieren und danach in den Ordner Z verschieben.
Danach die Datei CMD_87654321.txt in Ordner 2 kopieren und in Ordner X verschieben... und so weiter auch mit CMD_67890123_1.txt
Ich habe mit findstr probiert und mit if filename == "*12345678*" do ...
Finde aber keiner wirkliche Lösung. kann leider nur mit der Windows Batch arbeiten.
Hat jemand eine Lösung? oder einen Gedankenanstoß?
Wäre super!
Vielen Dank
Volkmar
ich habe vor 20 Jahren zu letzt was mit Windows Batch Sripting gemacht und suche schon seit einiger Zeit nach einer Lösung für folgendes Problem:
Ich habe verschiedene Dateien, wie z. B. CMD_12345678_1.txt oder CMD_87654321_1.txt oder CMD_67890123_1.txt in einem Ordner.
Das einzig greibare der Datei wäre die Zahlen in der MItte, die sich nicht ändern. Ich kann also nur den Namensstring der Datei auslesen und mit den Zahlen vergleichen.
Jetzt möchte die Datei, CMD_12345678_1.txt in Ordner 1 kopieren und danach in den Ordner Z verschieben.
Danach die Datei CMD_87654321.txt in Ordner 2 kopieren und in Ordner X verschieben... und so weiter auch mit CMD_67890123_1.txt
Ich habe mit findstr probiert und mit if filename == "*12345678*" do ...
Finde aber keiner wirkliche Lösung. kann leider nur mit der Windows Batch arbeiten.
Hat jemand eine Lösung? oder einen Gedankenanstoß?
Wäre super!
Vielen Dank
Volkmar
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 503082
Url: https://administrator.de/contentid/503082
Ausgedruckt am: 22.11.2024 um 13:11 Uhr
8 Kommentare
Neuester Kommentar
Hi,
"*" bedeutet bei Batch "alles, was noch kommt".
Also wird mit "*12345678" alles ausgwählt.
Wenn die Anzahl der Zeichen vor den Ziffern immer gleich ist, dann kannst Du da je Zeichen ein "?" als Wildcard benutzen.
E.
"*" bedeutet bei Batch "alles, was noch kommt".
Also wird mit "*12345678" alles ausgwählt.
Wenn die Anzahl der Zeichen vor den Ziffern immer gleich ist, dann kannst Du da je Zeichen ein "?" als Wildcard benutzen.
Jetzt möchte die Datei, CMD_12345678_1.txt in Ordner 1 kopieren und danach in den Ordner Z verschieben.
Warum kopierst Du diese Datei dann nicht gleich in den Ordner Z hinein?E.
Hi,
dann vergeiss doch alles vor vor 20 Jahren und geh gleich auf PowerShell. Geht damit schöner und es finden sich im Netz zig Beispiele für Datei-Operationen.
Zu deinen Beispiel wäre z.B. das ein Ansatz:
Es wird nur gleich verschoben. Wieso willst du erst eine Kopie haben und dann verschieben? Geht es dir um Sciherheit, dass die Dateien nciht im Nirvana verschwinden?
Wieviele Zahlen-Kombis gibt es? Du kannst daraus auch eine Funktion machen, und Match-Kriteiren / Ziel "dynamisch" übergeben und mit jeweils 1 Zeile die Sachen steuern.
mfg Crusher
dann vergeiss doch alles vor vor 20 Jahren und geh gleich auf PowerShell. Geht damit schöner und es finden sich im Netz zig Beispiele für Datei-Operationen.
Zu deinen Beispiel wäre z.B. das ein Ansatz:
$path = "C:\Users\Crusher\Desktop"
$ziel = "C:\Users\Crusher\Desktop\dest"
Get-ChildItem -Path $path | ? {$_.Name -match "12345678"} | % {
Move-Item -path $_.FullName -Destination $ziel
}
Es wird nur gleich verschoben. Wieso willst du erst eine Kopie haben und dann verschieben? Geht es dir um Sciherheit, dass die Dateien nciht im Nirvana verschwinden?
Wieviele Zahlen-Kombis gibt es? Du kannst daraus auch eine Funktion machen, und Match-Kriteiren / Ziel "dynamisch" übergeben und mit jeweils 1 Zeile die Sachen steuern.
mfg Crusher
Die Variante if filename == "*12345678*" dürfte garnicht funktionieren, weil an der Stelle meines Wissens keine Wildcards funktionieren.
Dein Namensmuster verstehe ich nicht. Du schreibst, die Zahlen in derr Mitte ändern sich nicht. Aber du bringst Beispiele, wo unterschiedliche Zahlen drin stecken, aber das "cmd_" am Anfang und das "_1.txt" am Ende immer gleich sind?
Ich kämpfe aber auch gerade mit einem Problem mit findstr suchtext datei.txt und alternativ type datei.txt | find "suchtext"... Bei beiden müsste eigentlich %errorlevel% auf "0" sein, wenn was gefunden wird, und "1", wenn nichts gefunden wird, aber es ist immer "0", wenn ich das in einem Script mache. Wenn ich es an der Komandozeile mache, gehts. Idee?
Gleiches Resultat wenn ich es per type datei.txt | find "testtext" ersetze, errorlevel bleibt in der batch immer auf 0
Dein Namensmuster verstehe ich nicht. Du schreibst, die Zahlen in derr Mitte ändern sich nicht. Aber du bringst Beispiele, wo unterschiedliche Zahlen drin stecken, aber das "cmd_" am Anfang und das "_1.txt" am Ende immer gleich sind?
Ich kämpfe aber auch gerade mit einem Problem mit findstr suchtext datei.txt und alternativ type datei.txt | find "suchtext"... Bei beiden müsste eigentlich %errorlevel% auf "0" sein, wenn was gefunden wird, und "1", wenn nichts gefunden wird, aber es ist immer "0", wenn ich das in einem Script mache. Wenn ich es an der Komandozeile mache, gehts. Idee?
D:\>findstr testtext datei.txt
haha dies ist ein ganz toller testtext
D:\>echo %errorlevel%
0
D:\>findstr kommtnichtvor datei.txt
D:\>echo %errorlevel%
1
@echo off
findstr testtext datei.txt
echo %errorlevel%
findstr kommtnichtvor datei.txt
echo %errorlevel%
D:\>test.cmd
haha dies ist ein ganz toller testtext
0
0
Ah, die Nummer ist der Empfänger? Und die Empfänger sind endlich und bekannt? Dann mache eine Textdatei mit der Liste der Empfänger...
empfaengerliste.txt
12345678
87654321
67890123
...
for /f %%j in (empfaengerliste.txt) do (
if exist "???_%%j_?.txt" copy "???_%%j_?.txt" zielpfad\%%j
)
Wenn sie nicht bekannt sind:
set zaehler=1000000
:schleife
if not exist zielpfad\%zaehler%\*.* md zielpfad\%zaehler%
if exist "???_%zaehler%_?.txt" copy "???_%zaehler%_?.txt" zielpfad\%zaehler%\
set /a zaehler=%zaehler%+1
if x%zaehler%==x100000000 goto weiter
goto schleife
:weiter
rem was auch immer...
Und jetzt hilfst du mir mit dem Errorlevel...
empfaengerliste.txt
12345678
87654321
67890123
...
for /f %%j in (empfaengerliste.txt) do (
if exist "???_%%j_?.txt" copy "???_%%j_?.txt" zielpfad\%%j
)
Wenn sie nicht bekannt sind:
set zaehler=1000000
:schleife
if not exist zielpfad\%zaehler%\*.* md zielpfad\%zaehler%
if exist "???_%zaehler%_?.txt" copy "???_%zaehler%_?.txt" zielpfad\%zaehler%\
set /a zaehler=%zaehler%+1
if x%zaehler%==x100000000 goto weiter
goto schleife
:weiter
rem was auch immer...
Und jetzt hilfst du mir mit dem Errorlevel...