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, 2788 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 ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

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

Ähnliche Inhalte
Batch & Shell
gelöst Ordner per Batch verschieben, Datei kopieren (2)

Frage von Shape.Shifter zum Thema Batch & Shell ...

Batch & Shell
gelöst BATCH ini Datei Datei auslesen (2)

Frage von Juergen42 zum Thema Batch & Shell ...

Batch & Shell
Batch: Word Datei kopieren und umbennen (9)

Frage von ExcelNoob177 zum Thema Batch & Shell ...

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

Frage von homermg zum Thema Router & Routing ...

Windows Server
DHCP Server switchen (20)

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

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

Frage von semperf1delis zum Thema Exchange Server ...

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

Frage von MegaGiga zum Thema Hardware ...