Batch soll erkennen - Datei oder Verzeichnis
Liebe Spezialisten,
ich habe da ein Problem: Ich möchte mein Batch insofern erweitern, dass es zwischen Dateien und Verzeichnissen unterscheiden kann. Im Augenblick können nur Verzeichnisse bearbeitet werden. Also wenn es eine Datei einliest, soll xcopy ohne /i ausgeführt werden und das robocopy soll nicht laufen.
Vielen herzlichen Dank mit ebensolchen Grüßen
Eva~
@echo off&setlocal&chcp 1252>nul&pushd=\
if not exist %windir%\system32\robocopy.exe set Robo=No&echo Robocopy nicht gefunden, keine Synchronisierung m”glich!&echo.&pause
REM ———————————————————————————
REM Hierhin wird gesichert
REM ———————————————————————————
set Backup=S:\
if %Backup:~-1%==\ set Backup=%Backup:~0,-1%
if %1!==! (
REM ———————————————————————————
REM Zu sichernde Dateien...
REM ———————————————————————————
REM Achtung: Ein Laufwerk ohne Verzeichnis (z.B. D:\) darf nur alleine in der Liste stehen!
REM Ansonsten würden weitere schon gesicherte Daten (von anderen Laufwerken)
REM gelöscht werden, da sie auf diesem Laufwerk ja nicht vorhanden sind.
for %%n in (
"%USERPROFILE%\Favorites"
"%USERPROFILE%\Links"
D:\Bilder
D:\Dokumente
D:\Musik
D:\Videos
)do call:save %%n
)else (
REM ———————————————————————————————————————————————————————————
REM ...oder Parameterübergabe von zu sichernden Dateien
REM (bis zu 9 Datenquellen markieren, senden an Backup.bat
REM - setzt voraus: Backup.bat im Verzeichnis
REM C:\Users\..\AppData\Roaming\Microsoft\Windows\SendTo)
REM ———————————————————————————————————————————————————————————
for %%n in (%1 %2 %3 %4 %5 %6 %7 %8 %9)do call:save %%n)
popd&endlocal&chcp 850>nul&goto:eof
:save
set From=%~1
if %From:~-1%==\ set From=%From:~0,-1%
echo.&echo %From%
set To=%From%
if %To:~1,1%==: set To=%To:~3%&if %To:~2,1%! neq \! set To=%To:~2%
if "%To%" neq "" set To=\%To%
xcopy/m/e/i/h/r/k/y "%From%" "%Backup%%To%"
REM Sichert alle Dateien mit Archive-Attribut (auch geänderte Dateien mit identischer/m Größe/Zeitstempel)
if not defined Robo robocopy/dcopy:t /mir /r:0 /njh /njs "%From%" "%Backup%%To%"
REM Synchronisiert (Verzeichnis-Zeitstempel und Löschen von Dateien, die in der Quelle nicht mehr vorhanden sind)
ich habe da ein Problem: Ich möchte mein Batch insofern erweitern, dass es zwischen Dateien und Verzeichnissen unterscheiden kann. Im Augenblick können nur Verzeichnisse bearbeitet werden. Also wenn es eine Datei einliest, soll xcopy ohne /i ausgeführt werden und das robocopy soll nicht laufen.
Vielen herzlichen Dank mit ebensolchen Grüßen
Eva~
@echo off&setlocal&chcp 1252>nul&pushd=\
if not exist %windir%\system32\robocopy.exe set Robo=No&echo Robocopy nicht gefunden, keine Synchronisierung m”glich!&echo.&pause
REM ———————————————————————————
REM Hierhin wird gesichert
REM ———————————————————————————
set Backup=S:\
if %Backup:~-1%==\ set Backup=%Backup:~0,-1%
if %1!==! (
REM ———————————————————————————
REM Zu sichernde Dateien...
REM ———————————————————————————
REM Achtung: Ein Laufwerk ohne Verzeichnis (z.B. D:\) darf nur alleine in der Liste stehen!
REM Ansonsten würden weitere schon gesicherte Daten (von anderen Laufwerken)
REM gelöscht werden, da sie auf diesem Laufwerk ja nicht vorhanden sind.
for %%n in (
"%USERPROFILE%\Favorites"
"%USERPROFILE%\Links"
D:\Bilder
D:\Dokumente
D:\Musik
D:\Videos
)do call:save %%n
)else (
REM ———————————————————————————————————————————————————————————
REM ...oder Parameterübergabe von zu sichernden Dateien
REM (bis zu 9 Datenquellen markieren, senden an Backup.bat
REM - setzt voraus: Backup.bat im Verzeichnis
REM C:\Users\..\AppData\Roaming\Microsoft\Windows\SendTo)
REM ———————————————————————————————————————————————————————————
for %%n in (%1 %2 %3 %4 %5 %6 %7 %8 %9)do call:save %%n)
popd&endlocal&chcp 850>nul&goto:eof
:save
set From=%~1
if %From:~-1%==\ set From=%From:~0,-1%
echo.&echo %From%
set To=%From%
if %To:~1,1%==: set To=%To:~3%&if %To:~2,1%! neq \! set To=%To:~2%
if "%To%" neq "" set To=\%To%
xcopy/m/e/i/h/r/k/y "%From%" "%Backup%%To%"
REM Sichert alle Dateien mit Archive-Attribut (auch geänderte Dateien mit identischer/m Größe/Zeitstempel)
if not defined Robo robocopy/dcopy:t /mir /r:0 /njh /njs "%From%" "%Backup%%To%"
REM Synchronisiert (Verzeichnis-Zeitstempel und Löschen von Dateien, die in der Quelle nicht mehr vorhanden sind)
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 197407
Url: https://administrator.de/contentid/197407
Ausgedruckt am: 26.11.2024 um 04:11 Uhr
6 Kommentare
Neuester Kommentar
moin,
Du könntest die Variablenerweiterung bzw. Parametererweiterung auch für das Erstellen des ZielPfades benutzen.
Die Backslashes am Ende werden somit auch gleich entfernt:
Gruß Phil
Du könntest die Variablenerweiterung bzw. Parametererweiterung auch für das Erstellen des ZielPfades benutzen.
Die Backslashes am Ende werden somit auch gleich entfernt:
set Backup=S:\
if "%~1" equ "" goto :Einzeln
for %%A in (
"%USERPROFILE%\Favorites"
"%USERPROFILE%\Links"
D:\Bilder
D:\Dokumente
D:\Musik
D:\Videos
) do call :save %%A "%Backup%%%~pnxA"
exit /b
:Einzeln
rem den Paramer ein Backslahs sowie Punkt anhängen
call :save "%~1\." "%Backup%%~pnx1\."
if "%~2" neq "" shift &goto :Einzeln
exit /b
:save
rem die Parameter lassen sich nun zum Vollständigen Pfad auflösen ohne Backslash am Ende
xcopy /m/e/i/h/r/k/y "%~f1" "%~f2"
rem xcopy meldet dann aber auch einen Fehlerhaften Ordner bei Dateien\.
xcopy /m/e/i/h/r/k/y %1 "%~f2" ||goto :Files
rem robocoby bekommt nun keine Backslashes
robocopy /dcopy:t /mir /r:0 /njh /njs "%~f1" "%~f2"
exit /b
:files
xcopy /m/e/h/r/k/y "%~f1" "%~dp2"
rem robocoby jammert rum wegen des letzten angehängten Backslashes
rem aber nicht, wenn ein Punkt hinter dem Backslash ist
robocopy /dcopy:t /mir /r:0 /njh /njs "%~dp1." "%~dp2." "%~nx1"
exit /b
Gruß Phil