gelbeseiten71
Goto Top

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

Content-Key: 503082

Url: https://administrator.de/contentid/503082

Printed on: April 16, 2024 at 05:04 o'clock

Member: emeriks
emeriks Oct 10, 2019 at 13:12:42 (UTC)
Goto Top
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.

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.
Member: Crusher79
Crusher79 Oct 10, 2019 updated at 13:16:18 (UTC)
Goto Top
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:
$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
Member: Gelbeseiten71
Gelbeseiten71 Oct 10, 2019 updated at 13:28:02 (UTC)
Goto Top
Es wird in einen ftp Ordner kopiert, wo die Dateien dann später verschwinden und danach soll es in einem anderen Ordner archiviert werden.

Ok, ich probiere mal mit dem "?"


Powershell, kann/darf ich auf dem Server nicht nutzen. =(
Vielen dank.

Ich melde mich ob es geklappt hat, oder nicht =D
Member: 1st1
1st1 Oct 10, 2019 at 13:25:24 (UTC)
Goto Top
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?

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
Gleiches Resultat wenn ich es per type datei.txt | find "testtext" ersetze, errorlevel bleibt in der batch immer auf 0
Member: Gelbeseiten71
Gelbeseiten71 Oct 10, 2019 at 13:31:54 (UTC)
Goto Top
Ich habe in dem Ordner, aus dem die Dateien kopiert/verschoben werden sollen, immer eine unterschiedliche Anzahl an Dateien.

Vorne steht ein Anfangstext_dann kommt eine Zahl, die den Empfänger anzeigt und am Ende die Versionsnummer.
Der Empfänger ist also der enzige String, de ich nutzen kann um zu deklarieren, in welchen Ordner die Dateien sollen.
Member: 1st1
1st1 Oct 10, 2019 updated at 13:40:29 (UTC)
Goto Top
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... face-smile
Member: Gelbeseiten71
Gelbeseiten71 Oct 10, 2019 updated at 14:05:27 (UTC)
Goto Top
Vielen Dank! klingt nach einer guten Idee. Die Empfänger sind alle bekannt. =)

Bei mir geht das mit dem errorlevel =(
Ich habe kein @echo off drin...

H:\COPY>findstr 100 CMD_12345678.txt
100
H:\COPY>echo 0

H:\COPY>findstr 101 CMD_12345678.txt
H:\COPY>echo 1
1
Member: Gelbeseiten71
Gelbeseiten71 Oct 10, 2019 at 14:39:28 (UTC)
Goto Top
Das sieht bisher ganz gut aus. =)

Bis ich das live testen kann, dauert es noch einen Moment. Gebe aber auf jden fall Bescheid =D

Danke euch erstmal für die Unterstützung =)