Mit welchem Batchbefehl kann ich zwischen Dateien unterscheiden deren Dateinamen mit Buchstaben und Zahlen anfangen?
Mein Problem ist das ich per Batch einige Logfiles ansehen muss. Das Batchprogramm soll unterscheiden zwischen Dateinamen die mit Buchstaben anfangen und Dateinamen die mit Zahlen anfangen. Die Dateinamen die mit Buchstaben anfangen sollen von diesem Ordner in einen anderen kopiert werden.
Ich versuche mich gerade etwas am Batchprogrammieren.
Mein Problem ist das ich zu obiger Frage im Netz leider keine zufriedenstellende Lösung gefunden habe. Hätte jemand einen Befehl zu Hand um da Problem zu lösen?
Ich stelle mir das so vor:
IF Filename==(a-z .*)(
copy files von A nach B)
else(
goto:eof)
Sorry kenne die Batchsyntax nicht so gut... Aber damit Ihr wisst was ich brauche: Hauptaugenmerk dabei sollte der Unterschied zwischen den Dateinamen sein...
Vielen Dank für die Hilfe
Grüße
Ich versuche mich gerade etwas am Batchprogrammieren.
Mein Problem ist das ich zu obiger Frage im Netz leider keine zufriedenstellende Lösung gefunden habe. Hätte jemand einen Befehl zu Hand um da Problem zu lösen?
Ich stelle mir das so vor:
IF Filename==(a-z .*)(
copy files von A nach B)
else(
goto:eof)
Sorry kenne die Batchsyntax nicht so gut... Aber damit Ihr wisst was ich brauche: Hauptaugenmerk dabei sollte der Unterschied zwischen den Dateinamen sein...
Vielen Dank für die Hilfe
Grüße
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 160376
Url: https://administrator.de/contentid/160376
Ausgedruckt am: 25.11.2024 um 10:11 Uhr
19 Kommentare
Neuester Kommentar
Hallo D3ns!007!
Versuch es etwa so (direkt in der CMD-Shell - als Batch mit verdopelten Prozentzeichen):
Wegen des "
Grüße
bastla
Versuch es etwa so (direkt in der CMD-Shell - als Batch mit verdopelten Prozentzeichen):
for /f "delims=" %i in ('dir /b *.log^|findstr /v /b "[0-9]"') do @echo copy "%i" "D:\Zielordner\"
echo
" vor dem "copy
" wird der Kopierbefehl (zum Testen) nur angezeigt, aber noch nicht ausgeführt ...Grüße
bastla
Sorry kenne die Batchsyntax nicht so gut...
Die Forumskonventionen aber auch nicht, sonst hätte die Frage mit "Tach" oder "Gruezi" angefangen.Beispiel am CMD-Prompt
[nur die erste Zeile ist Eingabe, der Rest Ausgabe. Führendes ">" gehört zum Prompt]
>for /f "delims=" %i in ('dir /b ^|findstr /r "^[0-9]"') do @echo copy "%i" X:\WhereEver\"
copy "01000100..txt" X:\WhereEver\"
copy "0byte.txt" X:\WhereEver\"
copy "1.bat" X:\WhereEver\"
copy "132.bat" X:\WhereEver\"
copy "14.bat" X:\WhereEver\"
copy "22mio.txt" X:\WhereEver\"
copy "34.bat" X:\WhereEver\"
Grüße
Biber
[Edit @bastla] Okay, wenn du die Dateien mit Buchstaben kopierst, dann nehm ich die mit Ziffern.... *g [/Ecit]
Hallo D3ns!007!
geht alle Ergebniszeilen (= jeweils %i) des/der in der Klammer (und zwischen den Apostrophen) stehenden Befehle/s durch und führt für jede die nach dem "
listet alle Ordnerinhalte (wenn es sicher nur Dateien sein sollen, wäre zusätzlich "
no comment ...
Näheres findest Du unter Verwendung der Online-Hilfe, etwa mit "
Grüße
bastla
for /f "delims=" %i in (' ') do
do
" stehende/n Aktion/en ausdir /b *.log^|findstr /v /b "[0-9]"
/a-d
" zu verwenden) mit dem Typ ".log" auf (nur Name und Typ) und filtert dann mit "findstr
", wobei wegen des "/v
" alle Zeilen übrigbleiben, die nicht dem Filterkriterium entsprechen@echo copy "%i" "D:\Zielordner\"
Näheres findest Du unter Verwendung der Online-Hilfe, etwa mit "
findstr /?
" oder sowie ausführlich für "for
" im Tutorial zur FOR-Schleife.Grüße
bastla
Hallo D3ns!007!!
Etwa so:
Grüße
bastla
Etwa so:
@echo off & setlocal
set "src=\\Test\Source"
set "dst=\\Test\destination"
echo Bitte warten Sie während das Programm die Dateien kopiert...
REM.
color 8F
for /f "delims=" %%i in ('dir /b "%src%\*.log"^|findstr /v /b "[0-9]"') do if not exist "%dst%\%%i" copy "%src\%%i" "%dst%\"
echo Nun koennen Sie mit beliebigem Tastendruck das Fenster schliessen. Der Copy-Job ist durchgefuehrt.
pause
bastla
Hallo D3ns!007!
Ungetestet:
Das hier verwendete Unterprogramm "
Mit der Zählervariablen %Nr% bzw der daraus erzeugten Variablen %Zusatz% kann dann solange "probiert" werden, bis ein Zusatz gefunden wird, der noch nicht vorhanden ist - im Optimalfall (wenn es die zu kopierende Datei im Zielordner noch nicht gibt) bleibt dabei %Zusatz% leer.
Grüße
bastla
P.S.: Ob "das möglich ist" bzw ich eine "Idee dazu" habe, ergibt sich eigentlich ohnehin aus meiner (im Negativfall nicht gegebenen) Antwort ...
[Edit] Fehlendes Prozentzeichen in Zeile 22 ergänzt [/Edit]
[Edit2] ... und %%i durch %~1 ersetzt [/Edit2]
Ungetestet:
@echo off & setlocal
set "src=\\Test\Source"
set "dst=\\Test\destination"
echo Bitte warten Sie während das Programm die Dateien kopiert...
REM.
color 8F
for /f "delims=" %%i in ('dir /b "%src%\*.log"^|findstr /v /b "[0-9]"') do call :ProcessFile "%%i"
echo Nun koennen Sie mit beliebigem Tastendruck das Fenster schliessen. Der Copy-Job ist durchgefuehrt.
pause
goto :eof
:ProcessFile
set /a Nr=0
set "Zusatz="
:Loop
if not exist "%dst%\%~n1%Zusatz%%~x1" goto :CopyIt
set /a Nr+=1
set "Zusatz=(%Nr%))"
goto :Loop
:CopyIt
copy "%src%\%~1" "%dst%\%~n1%Zusatz%%~x1"
goto :eof
ProcessFile
" verhält sich wie ein weiterer Batch - daher kommt der beim Aufruf übergebene Dateiname (inkl. Typ) als %1 an und kann entsprechend weiterverarbeitet =aufgeteilt in "%~n1
" (=nur Name) und "%~x1
" (= nur Typ bzw "extension") werden.Mit der Zählervariablen %Nr% bzw der daraus erzeugten Variablen %Zusatz% kann dann solange "probiert" werden, bis ein Zusatz gefunden wird, der noch nicht vorhanden ist - im Optimalfall (wenn es die zu kopierende Datei im Zielordner noch nicht gibt) bleibt dabei %Zusatz% leer.
Grüße
bastla
P.S.: Ob "das möglich ist" bzw ich eine "Idee dazu" habe, ergibt sich eigentlich ohnehin aus meiner (im Negativfall nicht gegebenen) Antwort ...
[Edit] Fehlendes Prozentzeichen in Zeile 22 ergänzt [/Edit]
[Edit2] ... und %%i durch %~1 ersetzt [/Edit2]
Eventuell ein Fehler im Script?
Ergänze doch mal in Zeile 22
Kleiner Tipp. Wenn beim Kopieren vom OS die Fehlermeldung "Das System kann die angegebene Datei nicht finden" kommt,
dann dürfte es sich dabei handeln um
[_] die Zieldatei?
[_] die Protokolldatei?
[_] die Batchdatei?
[_] die Quelldatei?
Ergänze doch mal in Zeile 22
copy "%src\%%i" "%dst%\%~n1%Zusatz%%~x1"
...ein Prozentzeichen nach den drei Buchstaben "src"Kleiner Tipp. Wenn beim Kopieren vom OS die Fehlermeldung "Das System kann die angegebene Datei nicht finden" kommt,
dann dürfte es sich dabei handeln um
[_] die Zieldatei?
[_] die Protokolldatei?
[_] die Batchdatei?
[_] die Quelldatei?
@Biber
Danke für's Aushelfen
Ich trage das mal oben nach, belasse es aber beim Status "Ungetestet" ...
Grüße
bastla
Danke für's Aushelfen
Ich trage das mal oben nach, belasse es aber beim Status "Ungetestet" ...
Grüße
bastla
Moin D3ens!007,
Ersetze doch das "%%i" in der vorhin korrigierten Zeile durch %1.
Kannst du denn nicht Testen, beispielsweise indem du statt des "copy vonirgendwoMitVariablen nachirgenwoMitVariablen"
ein "ECHO copy vonirgendwoMitVariablen nachirgenwoMitVariablen" machst?
Grüße
Biber
Zitat von @D3ns007:
Hallo,
also ich hab es nochmals durchgespielt und auch das %-Zeichen nachgetragen.
Die Fehlermeldung ist die gleiche....
Dann ist im Gegensatz zu vorher diesmal wahrscheinlich die zu kopierende Datei nicht da.Hallo,
also ich hab es nochmals durchgespielt und auch das %-Zeichen nachgetragen.
Die Fehlermeldung ist die gleiche....
Ersetze doch das "%%i" in der vorhin korrigierten Zeile durch %1.
Kannst du denn nicht Testen, beispielsweise indem du statt des "copy vonirgendwoMitVariablen nachirgenwoMitVariablen"
ein "ECHO copy vonirgendwoMitVariablen nachirgenwoMitVariablen" machst?
Grüße
Biber
Hallo D3ns!0047!
Ich habe ja auch nicht nur einen Fehler eingebaut ...
Da sich die Zeile nicht mehr in der Schleife befindet, gibt's natürlich auch kein "%%i" mehr - wieder etwas richtiger sollte die Zeile dann so aussehen:
Grüße
bastla
[Edit] @Biber: Thx again - heute hab ich aber ordentlich Gelegenheit zum Ausbügeln gelassen ... [/Edit]
Ich habe ja auch nicht nur einen Fehler eingebaut ...
Da sich die Zeile nicht mehr in der Schleife befindet, gibt's natürlich auch kein "%%i" mehr - wieder etwas richtiger sollte die Zeile dann so aussehen:
copy "%src%\%~1" "%dst%\%~n1%Zusatz%%~x1"
bastla
[Edit] @Biber: Thx again - heute hab ich aber ordentlich Gelegenheit zum Ausbügeln gelassen ... [/Edit]