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

Batch, Dateien nach Endung suchen, kopieren und ggf umbenennen

Frage Entwicklung Batch & Shell

Mitglied: jufe87

jufe87 (Level 1) - Jetzt verbinden

17.04.2009, aktualisiert 14:43 Uhr, 12847 Aufrufe, 9 Kommentare

Hallo!
Ich sitze schon eine ganze weile an dieser Batch-Datei, bekomme allerdings kein vernünftiges Ergebnis.

C:\ (mit Unterordnern) Soll nach *.blabla Dateien durchsucht werden und alle gefundenen sollen nach D:\ kopiert werden.
Dabei kann es auch sein, dass Dateinamen doppelt vorkommen, diese sollen dann ggf. geändert werden, sodass keine Datei überschrieben wird.
Ich habe mir das so überlegt, dass ich Die Uhrzeit mit milisekunden anhänge, damit es zu immer Unterschiedlichen namen kommt.
Dies klappt allerdings nicht, da pro Batch-Aufruf Immer die Selbe Zahl genommen wird.

Hier mein bisheriger code:

[code]
@echo off
REM Variablen Setzen
set dir=c:\
REM !!BITTE ENTSPRECHEND ANPASSEN!!
set file=*.blabla
set endung=.blabla
set pfad=D:
REM Erstellung der Zeitvariable
set h=%time:~0,2%
set m=%time:~3,2%
set s=%time:~6,2%
set ms=%time:~9,2%
set zeit=%date%_%h%h%m%m%s%s%ms%ms
REM Sucht nach Dateien und kopiert diese in einen Unterordner im oben angegebenen
REM Verzeichnis. Der Name des Unterordner Setzt sich aus
REM "Dateiname_Dateiendung_Datum_Uhrzeit mit milisekunde" zusammen.
for /r "%dir%" %%i in ("%file%") do (
if exist %%i xcopy "%%i" "%pfad%\%%~ni%endung%_%zeit%\" /V /S /I)
pause
[/code]

Jemand eine Idee?
Mitglied: LotPings
17.04.2009 um 15:19 Uhr
Klar, du setzt die Zeit statisch ausserhalb der Schleife einmal in die Variable.
Wie soll sich denn der Inhalt innerhalb der Schleife ändern?
Das ist doch kein Funktion die es in Batch eh nicht gibt.

Deine If Abfrage ist übrigends Lötzinn, deine Quell-Datei existiert immer.
Du kannst einen Teil in eine Subroutine verlagern, etwas so:

code übrigends mit spitzen Klammern.
01.
@echo off&setlocal EnableDelayedExpansion 
02.
set dir=c:\ 
03.
set file=*.blabla 
04.
set endung=.blabla 
05.
set pfad=D: 
06.
REM Sucht nach Dateien und kopiert diese in einen Unterordner im oben angegebenen 
07.
REM Verzeichnis. Der Name des Unterordner Setzt sich aus 
08.
REM "Dateiname_Dateiendung_Datum_Uhrzeit mit milisekunde" zusammen. 
09.
for /r "%dir%" %%i in ("%file%") do Call :Sub "%%~fi" "%%~ni" 
10.
pause 
11.
goto :EOF 
12.
:Sub 
13.
REM Erstellung der Zeitvariable 
14.
set zeit=%date%_%time::=% 
15.
set Ziel=%pfad%\%~2%endung% 
16.
if exist "%Ziel%" set Ziel=%Ziel%_%Zeit% 
17.
echo xcopy %1 "%Ziel%" /V /S /I
Ungestestet, wenn die Ausgabe richtig erscheint, das echo vor dem xcopy Befehl entfernen.

HTH

Gruß
LotPings
Bitte warten ..
Mitglied: hajowe
17.04.2009 um 15:30 Uhr
ja das ist was dran Zeit ausserhalb der Schleife verändert sich natürlich nicht.
Bitte warten ..
Mitglied: Biber
17.04.2009 um 15:48 Uhr
<OT>
Zitat von hajowe:
ja das ist was dran Zeit ausserhalb der Schleife verändert sich natürlich nicht.
Allerdings sind die Änderungen ausschließlich innerhalb einer Zeitschleife genauso unbefriedigend.
Siehe Und täglich grüßt das Murmeltier.

Schönes Wochenende
Biber
</OT>
Bitte warten ..
Mitglied: jufe87
17.04.2009 um 16:02 Uhr
Das ist es leider nur fast.
So werden Dateien zum Teil doppelt kopiert, was ich allerdings nicht so recht verstehe.
Bitte warten ..
Mitglied: LotPings
17.04.2009 um 17:01 Uhr
Zitat von jufe87:
Das ist es leider nur fast.
So werden Dateien zum Teil doppelt kopiert, was ich allerdings nicht
so recht verstehe.

Naja, er kopiert ja erst wenn der echo Befehl raus ist, das eine Datei schon da ist kann also (noch) nicht passieren. Habs jetzt getestet und noch angepasst, durch die Zielnamensänderung kommt sonst jedesmal die Frage ob Ziel eine Datei oder ein Verzeichnis ist.

01.
@echo off&setlocal 
02.
set dir=C:\ 
03.
set file=*.blabla 
04.
set endung=.blabla 
05.
set pfad=D:\ 
06.
for /r "%dir%" %%i in ("%file%") do Call :Sub "%%~fi" "%%~ni" 
07.
Pause 
08.
goto :EOF 
09.
:Sub 
10.
set zeit=%date:.=%_%time::=% 
11.
set Ziel=%pfad%\%~2 
12.
if exist "%Ziel%%endung%" set Ziel=%Ziel%_%Zeit:,=-% 
13.
Type NUL>"%Ziel%%endung%" 
14.
xcopy %1 "%Ziel%%endung%" /F /Y /C /H /V
Gruß
LotPings
Bitte warten ..
Mitglied: Biber
17.04.2009 um 17:03 Uhr
Zitat von jufe87:
Das ist es leider nur fast.
So werden Dateien zum Teil doppelt kopiert, was ich allerdings nicht so recht verstehe.
Moin jufe87,

willkommen im Forum.
Dieser Effekt wird durch den XCopy-Schalter "/s" wie in "works as designed" bewirkt.
Bei jedem
xcopy %1 "%Ziel%" /V /S /I
... wird ja die gefundene Datei %1 und alle gleichnamigen Quell-Dateien in Unterverzeichnissen darunter kopiert.
Aber die Dateien in Unterverzeichnissen triffst Du ja ohnehin später wieder im weiteren Verlauf der FOR /R-Rekursiv-Tour und kopierst sie nochmals.

Grüße
Biber
Bitte warten ..
Mitglied: bastla
17.04.2009 um 17:36 Uhr
@LotPings
durch die Zielnamensänderung kommt sonst jedesmal die Frage ob Ziel eine Datei oder ein Verzeichnis ist.
Dem kannst Du vorbeugen, indem Du am Ende des Zieles noch einen Stern anfügst:
xcopy %1 "%Ziel%%endung%*" /F /Y /C /H /V
Grüße
bastla
Bitte warten ..
Mitglied: LotPings
17.04.2009 um 17:54 Uhr
Zitat von bastla:
Dem kannst Du vorbeugen, indem Du am Ende des Zieles noch einen Stern anfügst:

Danke bastla,
den kannte ich nicht (mehr, Alzheimer lässt grüßen

@Biber
das passiert wenn kann Codeteile ungeprüft übernimmt,
aber meine Änderung erschlägt auch das, den /S hatte ich rausgenommen.

Gruß
LotPings
Bitte warten ..
Mitglied: jufe87
20.04.2009 um 08:13 Uhr
Also nach kurzem Test scheints super zu funktionieren.

Besten Dank!
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Batch & Shell
gelöst Per Batch Dateien in einen Ordner - ext. Festplatte übertragen (2)

Frage von tocksick zum Thema Batch & Shell ...

C und C++
Dateien in Ordner kopieren anhand vom Teil eines Dateinamen (22)

Frage von onlyforu8373 zum Thema C und C ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (15)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...