Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Mit welchem Batchbefehl kann ich zwischen Dateien unterscheiden deren Dateinamen mit Buchstaben und Zahlen anfangen?

Frage Entwicklung Batch & Shell

Mitglied: D3ns007

D3ns007 (Level 1) - Jetzt verbinden

08.02.2011, aktualisiert 13:37 Uhr, 5702 Aufrufe, 19 Kommentare

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
Mitglied: bastla
08.02.2011 um 13:52 Uhr
Hallo D3ns!007!

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\"
Wegen des "echo" vor dem "copy" wird der Kopierbefehl (zum Testen) nur angezeigt, aber noch nicht ausgeführt ...

Grüße
bastla
Bitte warten ..
Mitglied: Biber
08.02.2011 um 13:57 Uhr
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]
Bitte warten ..
Mitglied: D3ns007
08.02.2011 um 14:15 Uhr
Hallo Miteinander (so viel zu Forumskonventionen =)
Könntest Du mir evtl. erklären welcher Befehl da was macht?

Damit ich es verstehe und nicht bloß zusammenzimmer bis es geht..

Danke
Grüße
Bitte warten ..
Mitglied: bastla
08.02.2011 um 14:26 Uhr
Hallo D3ns!007!
for /f "delims=" %i in (' ') do
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 "do" stehende/n Aktion/en aus
dir /b *.log^|findstr /v /b "[0-9]"
listet alle Ordnerinhalte (wenn es sicher nur Dateien sein sollen, wäre zusätzlich "/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\"
no comment ...

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
Bitte warten ..
Mitglied: D3ns007
08.02.2011 um 15:20 Uhr
Danke bastla,
wenn das Programm jetzt vor dem kopieren prüfen soll ob die Dateien schon im Zielordner enthalten sind.
Wie geht das?

Grüße+Danke
D3ns!007
Bitte warten ..
Mitglied: bastla
08.02.2011 um 15:52 Uhr
Hallo D3ns!007!!

"if exist" oder "if not exist" - was eben grad besser passt ...

Grüße
bastla
Bitte warten ..
Mitglied: D3ns007
08.02.2011 um 16:07 Uhr
Mhmm ja ok ist klar.
Aber der soll ja in Ordner A reinschauen und mit den Dateien aus Ordner B vergleichen.
Weißt Du wie das geht?

grüße
Bitte warten ..
Mitglied: bastla
08.02.2011 um 16:32 Uhr
Hallo D3ns!007!!

Gib einfach den Pfad mit an ...

Grüße
bastla

P.S.: Vielleicht beschreibst du einmal den ganzen weiteren Plan ...
Bitte warten ..
Mitglied: D3ns007
09.02.2011 um 08:54 Uhr
Ja ok ich versuchs mal...

Also wir kopieren diese Logfiles von einem Ordner in einen anderen. Bevor die Dateien kopiert werden wäre es nicht schlecht wenn ein Abgleich anhand des Dateinamens zwischen den Ordnern gemacht wird. Falls es ein Log gibt das doppelt vorkommt (Dateinamen) dann möchte ich das Ja nicht überschreiben.

Momentaner Quelltext ist dieser:
01.
@echo off 
02.
set "src=\\Test\Source" 
03.
set "dst=\\Test\destination" 
04.
echo Bitte warten Sie während das Programm die Dateien kopiert... 
05.
REM. 
06.
color 8F 
07.
for /f "delims=" %%i in ('dir /b *.log^|findstr /v /b "[0-9]"') do copy %%i %dst% 
08.
echo Nun koennen Sie mit beliebigen Tastendruck das Fenster schließen. Der Copy-Job ist durchgefuehrt. 
09.
pause
Wenn das Programm den Vergleich noch hinbekommen würde dann bin ich glücklich =)
Bitte warten ..
Mitglied: bastla
09.02.2011 um 09:10 Uhr
Hallo D3ns!007!!

Etwa so:
01.
@echo off & setlocal 
02.
set "src=\\Test\Source" 
03.
set "dst=\\Test\destination" 
04.
echo Bitte warten Sie während das Programm die Dateien kopiert... 
05.
REM. 
06.
color 8F 
07.
for /f "delims=" %%i in ('dir /b "%src%\*.log"^|findstr /v /b "[0-9]"') do if not exist "%dst%\%%i" copy "%src\%%i" "%dst%\" 
08.
echo Nun koennen Sie mit beliebigem Tastendruck das Fenster schliessen. Der Copy-Job ist durchgefuehrt. 
09.
pause
Grüße
bastla
Bitte warten ..
Mitglied: D3ns007
09.02.2011 um 10:31 Uhr
Hallo Bastla,
mir ist gerade noch etwas beim testen aufgefallen.

Nach dem Vergleich der Daten soll die Datei trotzdem kompiert werden.
Also im Zielverzeichnis soll Log1.txt und Log1(1).txt stehen.

Ist das möglich? Hast Du eine Idee.

Danke!
Grüße

D3ns!007
Bitte warten ..
Mitglied: bastla
09.02.2011 um 11:13 Uhr
Hallo D3ns!007!

Ungetestet:
01.
@echo off & setlocal 
02.
set "src=\\Test\Source" 
03.
set "dst=\\Test\destination" 
04.
echo Bitte warten Sie während das Programm die Dateien kopiert... 
05.
REM. 
06.
color 8F 
07.
for /f "delims=" %%i in ('dir /b "%src%\*.log"^|findstr /v /b "[0-9]"') do call :ProcessFile "%%i" 
08.
echo Nun koennen Sie mit beliebigem Tastendruck das Fenster schliessen. Der Copy-Job ist durchgefuehrt. 
09.
pause 
10.
goto :eof 
11.
 
12.
:ProcessFile 
13.
set /a Nr=0 
14.
set "Zusatz=" 
15.
:Loop 
16.
if not exist "%dst%\%~n1%Zusatz%%~x1" goto :CopyIt 
17.
    set /a Nr+=1 
18.
    set "Zusatz=(%Nr%))" 
19.
goto :Loop 
20.
 
21.
:CopyIt 
22.
copy "%src%\%~1" "%dst%\%~n1%Zusatz%%~x1" 
23.
goto :eof
Das hier verwendete Unterprogramm "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]
Bitte warten ..
Mitglied: D3ns007
09.02.2011 um 11:46 Uhr
Bitte warten Sie wõhrend das Programm die Dateien kopiert...
Das System kann die angegebene Datei nicht finden.
Das System kann die angegebene Datei nicht finden.
Das System kann die angegebene Datei nicht finden.
Das System kann die angegebene Datei nicht finden.
Das System kann die angegebene Datei nicht finden.
Das System kann die angegebene Datei nicht finden.
Das System kann die angegebene Datei nicht finden.
Das System kann die angegebene Datei nicht finden.
Das System kann die angegebene Datei nicht finden.
Das System kann die angegebene Datei nicht finden.
Das System kann die angegebene Datei nicht finden.
Nun koennen Sie mit beliebigem Tastendruck das Fenster schliessen. Der Copy-Job ist durchgefuehrt.
Drücken Sie eine beliebige Taste . . .

Das hier sind die Meldungen die mir ausgegeben werden.
Es werden keine Dateien mehr kopiert (auch nicht ersetzt). Bekomme aber keine große Fehlermeldung...

Woran kann das liegen?
Bitte warten ..
Mitglied: Biber
09.02.2011 um 12:25 Uhr
Zitat von D3ns007:
Woran kann das liegen?
Eventuell ein Fehler im Script?
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?
Bitte warten ..
Mitglied: bastla
09.02.2011 um 12:34 Uhr
@Biber

Danke für's Aushelfen

Ich trage das mal oben nach, belasse es aber beim Status "Ungetestet" ...

Grüße
bastla
Bitte warten ..
Mitglied: D3ns007
09.02.2011 um 13:11 Uhr
Hallo,
also ich hab es nochmals durchgespielt und auch das %-Zeichen nachgetragen.
Die Fehlermeldung ist die gleiche....

Grüße
Bitte warten ..
Mitglied: Biber
09.02.2011 um 13:20 Uhr
Moin D3ens!007,
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.
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
Bitte warten ..
Mitglied: bastla
09.02.2011 um 13:22 Uhr
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:
copy "%src%\%~1" "%dst%\%~n1%Zusatz%%~x1"
Grüße
bastla

[Edit] @Biber: Thx again - heute hab ich aber ordentlich Gelegenheit zum Ausbügeln gelassen ... [/Edit]
Bitte warten ..
Mitglied: D3ns007
09.02.2011 um 16:10 Uhr
Hallo Miteinander,
jetzt gehts.

Danke für die Tatkräftige Unterstützung!

Grüße
Der D3ns!007
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...