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

Batch soll erkennen - Datei oder Verzeichnis

Frage Entwicklung Batch & Shell

Mitglied: EvaEden

EvaEden (Level 1) - Jetzt verbinden

22.01.2013 um 08:00 Uhr, 2835 Aufrufe, 6 Kommentare

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)
Mitglied: bastla
22.01.2013, aktualisiert um 08:24 Uhr
Hallo EvaEden!

Um festzustellen, ob sich zB in %Ziel% ein gültiger Pfad zu einem Verzeichnis befindet, könntest Du etwa
dir /b/ad "%Ziel%" >nul 2>nul && echo Verzeichnis
verwenden ...

Grüße
bastla
Bitte warten ..
Mitglied: EvaEden
22.01.2013 um 11:59 Uhr
Super! Hät' ich auch selber drauf kommen können...

Vielen Dank & 1000 Grüße an bastla

 (\_/)
 (^.^)
(")_(")
Bitte warten ..
Mitglied: pieh-ejdsch
23.01.2013, aktualisiert um 19:23 Uhr
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:
01.
set Backup=S:\ 
02.
 
03.
if "%~1" equ "" goto :Einzeln 
04.
for %%A in (  
05.
 
06.
 "%USERPROFILE%\Favorites" 
07.
 "%USERPROFILE%\Links" 
08.
 D:\Bilder 
09.
 D:\Dokumente 
10.
 D:\Musik 
11.
 D:\Videos 
12.
 
13.
) do call :save %%A "%Backup%%%~pnxA" 
14.
exit /b 
15.
 
16.
:Einzeln 
17.
 rem den Paramer ein Backslahs sowie Punkt anhängen 
18.
call :save "%~1\." "%Backup%%~pnx1\." 
19.
if "%~2" neq "" shift &goto :Einzeln 
20.
exit /b 
21.
 
22.
:save 
23.
 rem die Parameter lassen sich nun zum Vollständigen Pfad auflösen ohne Backslash am Ende 
24.
xcopy /m/e/i/h/r/k/y "%~f1" "%~f2" 
25.
 
26.
 rem xcopy meldet dann aber auch einen Fehlerhaften Ordner bei Dateien\. 
27.
xcopy /m/e/i/h/r/k/y %1 "%~f2" ||goto :Files 
28.
 
29.
  
30.
 rem robocoby bekommt nun keine Backslashes 
31.
robocopy /dcopy:t /mir /r:0 /njh /njs "%~f1" "%~f2" 
32.
exit /b 
33.
 
34.
:files 
35.
xcopy /m/e/h/r/k/y "%~f1" "%~dp2" 
36.
 rem robocoby jammert rum wegen des letzten angehängten Backslashes 
37.
 rem aber nicht, wenn ein Punkt hinter dem Backslash ist 
38.
robocopy /dcopy:t /mir /r:0 /njh /njs "%~dp1." "%~dp2." "%~nx1" 
39.
exit /b
Gruß Phil
Bitte warten ..
Mitglied: EvaEden
08.02.2013 um 15:05 Uhr
Hi Phil,

vielen vielen Dank für Deinen Code-Review und die Verbesserungen <viele Ausrufezeichens>

Ich hab's gleich eingebaut und auch sonst noch verbessert/erweitert...

Herzlichst, Eva~ <°)))><

@echo off&setlocal&pushd=\
if exist %windir%\system32\robocopy.exe (set Skip=Xcopy&if %1! neq ! set Skip=)else (set Skip=Robo&echo Robocopy nicht gefunden, keine Synchronisierung ^(Verzeichnis-Zeitstempel und&echo L”schen von Dateien, die in der Quelle nicht mehr vorhanden sind^) m”glich!&echo.&pause)
setlocal EnableDelayedExpansion&call:exclude read
if %Skip%! neq Xcopy! if exist %~dpn0.exclude (for /f "delims=" %%L in (%~dpn0.exclude) do set FiledList=!FiledList! "%%L"
if !FiledList! neq !List! call>%~dpn0.exclude&call:exclude write
if defined List (set ExcludeList=/exclude:%~dpn0.exclude)else set ExcludeList=&del %~dpn0.exclude)else call:exclude write
setlocal DisableDelayedExpansion&chcp 1252>nul
:: ——————————————————————————
:: Hierhin wird gesichert
:: ——————————————————————————
set Backup=S:


if %1! neq ! goto:send
:: —————————————————————————
:: Zu sichernde Daten...
:: —————————————————————————
:: Achtung: Ein Laufwerk ohne Verzeichnis (z.B. D:\) darf nur alleine in der Liste stehen!
:: Ansonsten würden weitere schon gesicherte Daten (von anderen Laufwerken)
:: gelöscht werden, da sie auf diesem Laufwerk ja nicht vorhanden sind.
for %%D in (

"%USERPROFILE%\Desktop"
"%USERPROFILE%\Documents"
"%USERPROFILE%\Downloads"
"%USERPROFILE%\Favorites"
"%USERPROFILE%\Links"
"%USERPROFILE%\Music"
"%USERPROFILE%\Pictures"
"%USERPROFILE%\Videos"
D:\Outlook-Dateien\*.pst
D:\Treiber


)do call:save "%%~D." "%Backup%%%~pnxD."
goto:end
:: ————————————————————————————————————————————————————————
:: ...oder Parameterübergabe von zu sichernden Daten
:: (Kopiert zusätzlich Dateien mit Archiv-Attribut, so
:: auch geänderte mit identischer/m Größe/Zeitstempel)
:: Bis zu 9 Datenquellen markieren, senden an Backup.bat
:: - setzt voraus: Backup.bat im Verzeichnis
:: C:\Users\..\AppData\Roaming\Microsoft\Windows\SendTo
:: ————————————————————————————————————————————————————————
:send
call:save "%~1." "%Backup%%~pnx1."&if %2! neq ! shift&goto:send
echo.&echo Backup erledigt, Taste drcken...&pause>nul
:end
chcp 850>nul&attrib -s -h %Backup%>nul&popd&endlocal&goto:eof
:: ——————————————————————————
:: Auszuschließende Daten
:: ——————————————————————————
:exclude
for %%X in (

$RECYCLE.BIN
"System Volume Information"
"D:\Große Dateien\*.iso"


)do if %1==read (set List=!List! "%%~fX")else echo %%~fX>>%~dpn0.exclude
goto:eof
:save
chcp 850>nul&set Attr=/m&if %Skip%!==Robo! if not exist "%~f2" set Attr=
dir/b/ad "%~f1">nul 2>&1&&(set From=%~f1&set To=%~f2&set File=&set Dir=/e/i&set Mir= /mir&set Attrib=/s /d "%~f1\*")||(set From=%~dp1&set To=%~dp2&set File= "%~nx1"&set Dir=/q&set Mir=&set Attrib="%~f1")
if %Skip%! neq Xcopy! echo.&echo %~f1&xcopy%Attr%%Dir%/h/r/k/y%ExcludeList% "%~f1" "%To%"||(echo.&pause&goto:skip)
if not defined Attr attrib -a %Attrib%>nul
if not exist "%~f1" echo.&echo %~f1 nicht gefunden&echo.&pause&goto:skip
if %Skip%! neq Robo! robocopy "%From%." "%To%."%File% /dcopy:t%Mir% /r:0 /njh /njs /xd%List% /xf%List%
if %errorlevel% gtr 3 pause
:skip
chcp 1252>nul

PS: Wie kann man denn als "Quelltext" einfügen ?¿?
Bitte warten ..
Mitglied: bastla
08.02.2013 um 16:13 Uhr
Hallo EvaEden!
Wie kann man denn als "Quelltext" einfügen ?¿?
Verwende <code> und </code> ...

Grüße
bastla
Bitte warten ..
Mitglied: EvaEden
09.02.2013 um 18:52 Uhr
Dankesähr fielmals Baschtlr!!!
Bitte warten ..
Ähnliche Inhalte
Entwicklung
gelöst Verzeichnise sichern mit batch datei (Win10) (13)

Frage von Limbach zum Thema Entwicklung ...

Batch & Shell
USB-Stick mit Batch Datei erkennen (8)

Frage von derCreeper zum Thema Batch & Shell ...

Batch & Shell
gelöst Herunterfahren erkennen (Batch) (17)

Frage von clragon zum Thema Batch & Shell ...

Neue Wissensbeiträge
Viren und Trojaner

CNC-Fräsen von MECANUMERIC werden (ggf.) mit Viren, Trojanern, Würmern ausgeliefert

(4)

Erfahrungsbericht von anteNope zum Thema Viren und Trojaner ...

Windows 10

Windows 10: Erste Anmeldung Animation deaktivieren

(3)

Anleitung von alemanne21 zum Thema Windows 10 ...

Exchange Server

Mittels Batch-Script Exchange-Logs sammeln und archivieren

Anleitung von beidermachtvongreyscull zum Thema Exchange Server ...

Heiß diskutierte Inhalte
Verschlüsselung & Zertifikate
SSL Zertifikat für HTTPS (33)

Frage von Hendrik2586 zum Thema Verschlüsselung & Zertifikate ...

Grafikkarten & Monitore
24" oder 27" mit Full HD oder doch mehr Auflösung? (21)

Frage von brutzler zum Thema Grafikkarten & Monitore ...

Router & Routing
gelöst Linksys wrt1200ac v2 mit dd-wrt: keine vlan-einstellungen im GUI (15)

Frage von Pixi123 zum Thema Router & Routing ...

Netzwerke
Ip Adressenkonflikt bei Großfamilie (12)

Frage von gunter zum Thema Netzwerke ...