Zurück (C) Christof Ermer, Regensburg
Gästebuch 
(public. sonst besser Email)  ChristofErmer@gmail.com


01.10.2019

Batch_Methoden


Sehr gute BATCH Erklärung: http://www.antonis.de/dos/batchtut/bat-kurs/
http://www.antonis.de/dos/batchtut/battips/index.htm

https://sites.google.com/site/batchprogrammierung/befehle/operatoren
https://de.wikibooks.org/wiki/Batch-Programmierung:_Wichtige_DOS-Kommandos
https://www.script-example.com/themen/cmd_Batch_Befehle.php
https://tagungen.tekom.de/fileadmin/tx_doccon/slides/127_Microsoft_Batch_Ein_n_tzlicher_Helfer_f_r_t_gliche_Routinen.pdf
UmgebunsgVariablen:
https://de.ccm.net/contents/219-umgebungsvariablen

Beispiele aufwendiger Batchs  ( aus Movidius neuronale Netz Erkennung )  
demo_security_barrier_camera.bat
demo_squeezenet_download_convert_run.bat


Umschalten auf  deutsche Umlaute:
CHCP 1252 > nul

Autostart einer Batch in Window  Timer-Programmstart
C:\Windows\System32\cmd.exe /C "C:\Batch-NAS\NAS-Mount-Admin.cmd"

Batch immer als ADMIN ausführen
Indirekt über_ ZUERST Verknüpfung zu Batch erstellen. 
    Die Eigenschaften davon ändern. "als Administrator ausführen"
 Verknüpfungen -Reiter Verknüpfungen -->  Erweitert!" anklicken bei . "als Administrator ausführen"
Jetzt immer die  Verknüpfung ausführen !




SYSTEMVARIABLEN NUTZEN


Gültigekeit von SET Variablen. ( lokal )
aber kann so übergeben werden
for /f "tokens=*" %%i in (zwei.txt) do set korr1zeit=%%i
https://administrator.de/forum/g%C3%BCltigkeit-variablen-batch-dateien-28400.html

Auch ein aufruf eines 2. Batch reicht die gültigkeit an den Aufrufer zurück
call C:\Batch_My\Set_ChrE_PWD.cmd
    darin -->    SET ChE_PWD="12345678"
dann kann "batch darunter"
    ECHO /USER:ADS\erc24492 %ChE_PWD%


WINDOWS Suche:--> Umgebungsvariablen   = SystemSteuerung
oder im Command einfach
SET
eingeben

Es gibt unter Umgebungsvariablen viele weitere, sehr nutz volle, benutzbare Systemvariblen
NUMBER_Of_PROCEESSSORS    4
PATHEXT      .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
PSModulePath   
%ProgramFiles%\WindowsPowerShell\Modules  %SystemRoot%\system32\WindowsPowerShell\v1.0\Modules
USERNAME   SYSTEM
windir    %SystemRoot%

ANSICHT
echo %SystemRoot%

CHCP 1252 > nul

%NWUSERNAME%   --> z.B: erc24xxx

%N = Variable
%0 = Pfad zur BAT_Datei selbst
%1 %2 = Argument 1 und 2
%~d = Laufwerk
%~dp Laufwerk + Pfad
   %~dp0 = LW+Pfad+BatchName
%~t = Dateidatum  + Uhrzeit
%~z  = Grösse
Siehe:   https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-xp/bb490909(v=technet.10)

cd   %~dp0 
 D:\MovidiusNeuronalStick\
wechselt in das Verzeichnis aus dem die Batch-Datei aufgerufen worden ist.
   
    ~d0  = D:    ohne  \
    %~dp0 =  D:\MovidiusNeuronalStick\
    ~p0  =  Nur OrdnerName ohne LaufWerk  :\MovidiusNeuronalStick\ 

 SET SCRIPT_LOCATION=%~dp0
       set ROOT=%~dp0
ECHO SCRIPT_LOCATION=%SCRIPT_LOCATION%

    %~nx0

ECHO NAME der aufrufenden Batchs selbst = %~nx0


ECHO %~nx0

@ECHO OFF
ECHO ** Dies soll nur die Path Selektoren zeigen  ***
ECHO.
SET LAUFWERK=%~d0
ECHO LAUFWERK=%LAUFWERK%

ECHO Zeige Ort, wo Batch aufgerufen wird. =  %~dp0
ECHO Nutzung "cd %~dp0"
SET  LW_plus_ORdner = %~dp0
ECHO LW_plus_ORdner = %LW_plus_ORdner%

ECHO NAME der aufrufenden Batchs selbst = %~nx0
SET BATCHNAME=%~nx0
ECHO  BATCHNAME=%BATCHNAME%
ECHO.

:: Das ist z.B:     D:\MovidiusNeuronalStick
set ROOT=%~dp0
        :: GetFullPath


SET %2=%~f1
ECHO ERGEBNIS -- WAS_IST_FULLPATH =

set SCRIPT_NAME=%~nx0  -->  gibt den NAME der Batch selbst wieder.


ECHO USERPROFILE = %USERPROFILE%       ::  C:\Users\Christof
ECHO USERPROFILE\Desktop = %USERPROFILE%\Desktop
ECHO HOMEPATH=%HOMEPATH%
ECHO USERNAME=%USERNAME%
ECHO USERDOMAIN= %USERDOMAIN%
ECHO SYSTEMROOT=%SYSTEMROOT%
ECHO APPDATA=  %APPDATA%
ECHO WINDIR=  %windir%  
PAUSE
exit /b


Anwendungs Beispiel
SET SOURCE_SPACE=C:\users\%USERNAME%\Desktop
ECHO.

:GetFullPath
SET %2=%~f1
SET WAS_IST_FULLPATH=%~f1
exit /b



PATH in Liste aufnehmen !!

:: set "MeinNeuerPfad=c:\Beispiel\Pfad"
:: Set "path=%path%;%MeinNeuerPfad%"   
:: Achtung ";"  einfügen 


===========================================
CALL mit Parametern;
Set ROOT=%~dp0
CALL :GetFullPath "%ROOT%\.." ROOT

:GetFullPath
SET %2=%~f1   
        ---->  Das ergibt D:\
===========================================
GOTO :EOF


_
Recherchen und UNGEKLÄRTES..  Wenn Zeit ist

exit /B 0     Die 0 IST errorlevel
GOTO :EOF

if [%Source_Space%]==[""] (exit /b)   oder %Source_Space%=="" (exit /b)   
ECHO Eingeloggter User=%USERPROFILE%

Autostart Ordner  kpiere das in die Explorerleiste
%appdata%\Microsoft\Windows\Start Menu\Programs\Startup


DAS GEHT NICHT
IF %Source_Folder%=="" (ECHO ** Source_Folder war LEER **) & (EXIT /b)
Bricht ab bei Namen mit Leerzeichen


Zuerst brauchen wir eine leere oder vorbereite Batch Datei = Text Datei mit Ausführungsattribut   und
Früher, bis ~2000 war die Endung (Suffix) .BAT, heute wird jedoch meisst .CMD  verwendet
Test.bat
Test.cmd

WICHTIG:  Völlig "formatfrei" bearbeiten mit Notepad.exe
    --> [Fenster Taste] + R  --> notepad.exe

Falls man sie automatisch beim Systemstart laden möchte, kann man sie in eines der folgenden Verzeichnisse legen.
Für den generellen Systemstart bei jedem Benutzer:
%ProgramData%\Microsoft\Windows\Start Menu\Programs\StartUp
Für den Systemstart des aktuell angemeldeten Benutzers:
%appData%\Microsoft\Windows\Start Menu\Programs\StartUp


Ausführung

COMMAND Fenster mit Admin Rechten:
oder Windows10 Powershell mit Adminrechten
Rechte Maustaste -A Mit Adminrechten ausführen, oder
    STRG+SHIFT + auf Kommandofenster Symbol klicken
  Kommandofenster   oder [Fenster Taste] + R  -->  CMD  einfügen

:: Aufruf einer .CMD Datei im Windows Scheduler
:: Parameter: C:\Windows\System32\cmd.exe /c "BackupDatei.cmd"
             --> /C Führt den durch string spezifizierten Befehl aus und beendet ihn dann


REM chcp 1252" immer als erste Zeile in einer Batch eingeben
@Echo off
    REM Umlaute sind ein Problem: Dos verwendet OEM 850 und nicht ANSI oder UTF-8,
    REM deshalb: Stelle die Codepage auf chcp 1252
:: ***************
chcp 1252
 :: **************

Plan B:
chcp 1252>nul
set ue=ü
set ae=ä
set oe=ö
set Uue=Ü
set Aae=Ä
set Ooe=Ö
set ss=ß
chcp 850>nul  
Dann kann man direkt im Notepad Umlaute schreiben

SET /P  EINGABE=   Bitte eine zahl eingeben ?    aber auch \\Server\Ordner  geht


REM   oder ::  = Kommentar   
keine < | > erlaubt, da Pipe oder Darten Umlenkung

@ECHO ON/OFF
@Sagt, das es nicht angezeigt  wird.
echo.    mit Punkt = Leerzeile bzw Leerzeichen

> nul   ( ein "l" )    Ausgabe auf NICHTS = unsichtbar oder verworfen
ping 127.0.0.1  > nul  

md  = Make Directory
MD D:\AA_TEST\HieristNIX\DaAuchNicht
SET insert=D:\AA_TEST\HieristNIX\DaAuchNicht
if NOT EXIST %insert% MD %insert%
if EXIST %insert%  ECHO ALLES OK
if NOT EXIST %insert%  ECHO NIX DA

del *.*logdatei.txt         löschen mit Jokerzeichen   ? = EIN Zeichenersatz, * = ALLE

( pinf´h
Pfad: ..\..\..\..\..\..\..\..\..\.."\..\Herbst
FOLDERPATH=..\..\..\..\..\..\..\..\..\..^"\\..%Folder2:~3,999%

SET VariableName=Inhalt
Variablen werden von Text mit "%Variable%" eingeklammert und so  unterschieden
SET Counter=2

Rechenausdruck:
SET /A %
Counter% = %Counter% +1

SET

SET ZIEL_LW=B:
SET LOG_ORDNER=\LOGs
SET ROBOLOG=%ZIEL_LW%%LOG_ORDNER%
ORDNER sauber im batch ANLEGEN:
IFausdruck ELSE ausdruck
IF [NOT] ERRORLEVEL Nummer Befehl
IF [NOT] Zeichenfolge1==Zeichenfolge2 Befehl
IF
NOT] EXIST Dateiname Befehl


IF EXIST A:\nul
IF EXIST A:\nul (Echo IFOK xxERRORLEVEL %ERRORLEVEL%) ELSE (ECHO hierelse YYERRORLEVEL %ERRORLEVEL%)
Liefert:immer  ERRORLEVEL 0
auch im ELSE FALL
IF EXIST X:\nul  (Echo IFOK XXERRORLEVEL %ERRORLEVEL%) ELSE (ECHO hierelse YYERRORLEVEL %ERRORLEVEL%)
Liefert:immer  ERRORLEVEL 0 auch im ELSE FALL


if %Counter%==3 Echo Drei Erreicht
ECHO Geben Sie den Text ein!
SET /P text=     Direkte eingabe--> Eingabeaufforderung
ECHO Sie haben "%text%" eingegeben!
 

SET ROBOLOG=C:\temp
if not exist %ROBOLOG% MD %ROBOLOG%

IF [NOT] ERRORLEVEL Wert Befehl
IF [NOT] Zeichenfolge1==Zeichenfolge2 Befehl
IF [NOT] EXIST Datei Befehl

IF NOT EXIST A:\ (ECHO A= NICHT da) & (ECHO und tue noch was)
IF EXIST B:\ (ECHO B: Laufwerk ist da)

IF "%1"=="" EXIT
if not exist %ROBOLOG% MD %ROBOLOG%
IF EXIST "%USERPROFILE%\Desktop\test.txt"  DEL "%USERPROFILE%\Desktop\test.txt" & EXIT
IF NOT EXIST %tmp%\nul MD %tmp%


Abfragen ob Variable LEER ist
if [%SourceSpace%]==[""] (exit /b)
oder
if %SourceSpace%==""  (exit /b)

FOR
https://www.axel-hahn.de/batch/helferlein-und-tabellen/alle-windows-kommandos?id=for

FOR %Variable IN (Satz) DO Befehl [Parameter]
%%Variable

ECHO Die FOR-Schleife ist ein Befehl, der so oft durchlaufen wird, wie die Liste Datensätze vorweist.
Als Dateinamen kann man den exakten Namen wählen oder Platzhalter (z.B. *.*)
verwenden. Wollen wir alle Dateien eines Verzeichnisses auflisten, so ist dies so möglich.
FOR %%i IN (*.*) DO ECHO %%
 %%I ist ein Zählvariable


---------------------------------------------
pause

> Weiterleitung überschreiben
>>  = Weiterleitung  anfügen
ping > nul

SUB-Routinen mit Labels:
1: Goto:      goto :SubRoute_lanstart
2: Call         call :SubRoute_lanstart   rerun mit  "exit /b"
Sartet eine andere ausführbare Datei und wartet auf deren Abschluss.
CALL [Dateipfad]Dateiname

(ping 192.168.178.1 > nul) || call :SubRoute_lanstart1
Delimiter
FOR /F "delims="%%i IN  ('ping -n 1 %ip%^|findstr "berschreitung nicht"') do (echo %time%: %%i >> "%Log%")

Echo Error = %errorlevel%
if errorlevel 0 echo alles OK
if note errorlevel 0 echo alles OK
if %ERRORLEVEL%==0 goto fertig

ODER ALS PIPE  ||
rem (ping 192.168.178.1) || Echo Error = %errorlevel%  || if errorlevel 0 THEN echo alles OK || if not errorlevel 0 THEN echo NOT NULL

-------------
:SubRoute_lanstart1
    ECHO lanstart1  START
exit /b

start
/wait

find /I Findet Dateien oder Zeichenfolgen
 


Steuerzeichen
https://de.wikibooks.org/wiki/Batch-Programmierung:_Batch-Operatoren

&
Befehlsverkettung: mehrere Batch-Befehle in einer Zeile können hintereinander ausgeführt werden
befehl1 & befehl2

&&
bedingte Befehlsverkettung: der zweite Befehl wird nur ausgeführt, wenn der erste Befehl erfolgreich war
befehl1 && befehl2ping

|
Befehlsverkettung mittels "pipe": der zweite Befehl bekommt die Ausgabe des ersten Befehls als Eingabe
befehl1 | befehl2

||
bedingte Befehlsverkettung: der zweite Befehl wird nur ausgeführt, wenn der erste Befehl fehlschlug
befehl1 || befehl2

Klammer( )
ping (%NAS_BASE_IP% > nul) &  Echo NAS_Ping Error=%errorlevel%




NETZWERK
Laufwerke Einhängen , Prüfen mit BATCH Methoden

https://www.administrator.de/forum/batch-netzwerkverbindung-pr%C3%BCfen-38296.html

von: https://www.windows-faq.de/2015/10/21/netzwerkprobleme-feststellen-nur-ping-aussetzer-protokollieren-pingtest-bat/
Hier als Text:
@echo off
chcp 1252
echo Pingtest - Ping Aussetzer protokollieren
echo ========================================
echo Bitte geben Sie die IP ein:
:: set /p ip=
set ip=132.199.???.???
IF NOT EXIST C:\temp (md C:\temp)
ECHO C:\temp THEN md C:\temp
set Log=c:\temp\pingtest-%ip%.txt
echo Logfile für IP %ip% >> %Log%
:: echo >> "%Log%"
:ping
ECHO "Ping"
for /f "delims=" %%i in ('ping -n 1 %ip%^|findstr "beschreitung"') do (echo %time%: %%i >> "%Log%")
ECHO Weiter gehts
for /f "delims=" %%i in ('ping -n 1 %ip%^|findstr "berschreitung"') do (echo %time%: %%i)
goto :ping

pause
exit

Ping-Test.bat
%%i is simply the loop variable


TRICK: Frage nach     Laufwerl:\nul
IF EXIST U:\nul goto .....
Klammer notwendig !!
IF EXIST X:\nul  (ECHO  X IST  Da) ELSE (ECHO NIX DA)

control userpasswords2
NETZWERK TESTEN   +  Passwörter Verwalten mit [Fenster Taste] + R  --> control userpasswords2
https://www.administrator.de/forum/batch-netzwerkverbindung-pr%C3%BCfen-38296.html

ping ohne \\ schreiben
also:  ping 127.0.0.1


ping localhost > nul       ~2 Sekunden Pause
ping 127.0.0.1  > nul

GEFUNDENES:
ping -n 40 tonixp | find /i "Reply" && goto :lanstart2 || goto :lanstart1
(ping 192.168.178.1) || Echo Error = %errorlevel%  || if errorlevel 0 echo alles OK || if errorlevel not 0 echo NOT NULL

---------------------------------------------------------------------------------------
SET  NAS_IP=132.199.xxx.xxx
net use z: /d
net use z: \\%NAS_IP%\tmp

:Robocopy_Backup
md D:\User
REM   Tuhe was -->  Robocopy C\USER: D:USER /MIR
exit /b
------------------------

@ECHO OFF
@ECHO ******** START ************
REM SET NAS_IP=132.199.xxx.xxx
SET NAS_IP=192.168.178.1

REM (ping 132.199.xxx.xxx >nul) || goto :SubRoute_lanstart1
(ping %NAS_IP%) > nul || goto :lanstart1

ECHO ******** ENDE *************
pause
exit /b

ECHO ******** Das sollte nicht kommen *************
:SubRoute_lanstart1
ECHO.
ECHO lanstart1  START
REM TU WAS  MIT PASSWORT OHNE
ECHO lanstart ENDE
pause
ECHO.
exit /b
---------------------------------------------------------------

net use \\[Servername]\IPC$ /user:<Name> <Passwort>
robocopy <Quelle> \\<Servername>\Pfad /MIR
net use \\<Servername>\IPC$ /DEL

ALIAS  und Paramaeter


SET  NAS_USER_NAME=Christof
@Echo %NAS_USER_NAME%


https://www.lifewire.com/net-use-command-2618096
net use W: /delete
net use W: \\132.199.100.141\AGSchueller_WIKI /persistent:YES
net use W: \\132.199.100.141\AGSchueller_WIKI /USER:Christof_Admin /persistent:YES
net use W: \\132.199.100.141\AGSchueller_WIKI /USER:Christof_Admin "Passwort"  /persistent:YES

Netzwerk testen
ERROLEEL l funktoniert.
fehlercode=2  sonst 0

IF EXIST X:\ net use X: /del
net use X: \\server\freigabe
:RichtigesShare


          Automatische  Netz Laufwerk Einbindung  -_> Script für Autostart..

@ECHO OFF
ECHO Christof ELFORT Netzlaufwerk
SET ELFORT_LW=J:
IF EXIST %ELFORT_LW% (NET USE %ELFORT_LW% /DELETE /YES)
IF NOT EXIST %ELFORT_LW% (NET USE %ELFORT_LW% \\web\www\Fakultaeten\nat_Fak_II\studium\edverg\elfort /persistent:YES /YES)
IF NOT EXIST %ELFORT_LW% (NET USE %ELFORT_LW% \\web\www\Fakultaeten\nat_Fak_II\studium\edverg\elfort /USER:erc24492 "Passwort" /persistent:YES /YES)
IF NOT EXIST %ELFORT_LW% ECHO "*** LAUFWERK %ELFORT_LW% für Elfor Home ist nicht da ***
IF EXIST %ELFORT_LW% ECHO "*** LAUFWERK %ELFORT_LW% für Elfort OK !! ****
pause
exit

:: -----------------------------------------------------------------------------------
SET NAS_IP_ADR=132.199.100.145
:: Wecke ZIEL SErver

ping -n 4 %NAS_IP_ADR%  >nul
SET NET_LW=B:
SET NET_NAS_Folder=\PC_Sicherung
ECHO    %NET_LW%     %NET_NAS_FoldeR%
IF NOT EXIST %NET_LW% (CALL :Create_NET_Laufwerk)
exit /b


:Create_NET_Laufwerk:
IF EXIST %ZIEL_LW% (net use %ZIEL_LW% /delete /YES)
SET ServerTargetPath=\\132.199.100.145\PC_Sicherung
CALL :MakeLaufwerk_OhneUSR
IF EXIST %ZIEL_LW% ECHO Ohne USER OK
IF NOT EXIST %ZIEL_LW% CALL :MakeLaufwerk_USR
::Wenn OK, dann komenwir bis dahin
ECHO ** Alles OK Laufwerk %ZIEL_LW% Eingebunden **
::WARTE
ping -n 1 127.0.0.1 > nul
:: -----------------------------------------------------------------------------------

:: -----------------------------------------------------------------------------------
:MakeLaufwerk_OhneUSR
ECHO Probiere es ohne User--
IF NOT EXIST %ZIEL_LW% ECHO net use %ZIEL_LW% \\132.199.100.145\PC_Sicherung
IF NOT EXIST %ZIEL_LW% (net use %ZIEL_LW% \\132.199.100.145\PC_Sicherung /persistent:YES /YES  > nul)
exit /B
:: -----------------------------------------------------------------------------------

:: -----------------------------------------------------------------------------------
:MakeLaufwerk_USR
ECHO Probiere es mit User --
IF NOT EXIST %ZIEL_LW%  ECHO net use %ZIEL_LW% \\132.199.100.145\PC_Sicherung
IF NOT EXIST %ZIEL_LW% (net use %ZIEL_LW% \\132.199.100.145\PC_Sicherung /USER:XXXXXX "PASWORT" /persistent:YES /YES > nul)
IF ERRORLEVEL==2 (ECHO ERRORLEVEL=%ERRORLEVEL% -- Keine Laufwerk %ZIEL_LW% --**Exit !?!**) & PAUSE & EXIT
IF EXIST %ZIEL_LW% ECHO NET_LW MIT USER OK
exit /B
:: -----------------------------------------------------------------------------------




https://superuser.com/questions/482112/using-robocopy-and-excluding-multiple-directories

Mal sehen was man so lernen kann, wie es andere machen:

robocopy G: C:\backup /MIR /Z /LOG:C:\todaysdate-backup.log /XF *.iso *.log *.au /XD G:\dir1 .

rcChromeBIF.txt  "Bookmarks" "Custom Dictionary.txt" "Extension Cookies" "Favicons" "History" "Login Data" "Preferences" "Top Sites" "Visited Links" "Web Data" "Databases\" "Extensions\" "Local Storage\" "Plugin Data\" "User Scripts\" "User StyleSheets\"

rcChromeBXF.txt  "Bookmarks.bak" "ChromeDWriteFontCache" "Cookies" "Cookies-journal" "Current Session" "Current Tabs" "Extension Cookies-journal" "Favicons-journal" "Google Profile.ico" "History Provider Cache" "History-journal" "Last Session" "Last Tabs" "Login Data-journal" "Network Action Predictor" "Network Action Predictor-journal" "Network Persistent State" "Origin Bound Certs" "Origin Bound Certs-journal" "QuotaManager" "QuotaManager-journal" "README" "Secure Preferences" "Shortcuts" "Shortcuts-journal" "Top Sites-journal" "TransportSecurity" "Web Data-journal"

rcChromeBXD.txt  "Application Cache" "Cache" "data_reduction_proxy_leveldb" "Extension State" "File System" "GPUCache" "IndexedDB" "JumpListIcons" "JumpListIconsOld" "Local Extension Settings" "Media Cache" "Pepper Data" "Platform Notifications" "Service Worker" "Session Storage" "Storage" "Thumbnails" "Web Applications"

REM ChromeBak.bat
SET chromeprofdir=Google\Chrome\User Data\Default
SET /P rcChrmBIF=<C:\Backup\rcXcludes\rcChromeBIF.txt
SET /P rcChrmBXF=<C:\Backup\rcXcludes\rcChromeBXF.txt
SET /P rcChrmBXD=<C:\Backup\rcXcludes\rcChromeBXD.txt
robocopy "%LOCALAPPDATA%\%chromeprofdir%" "H:\ChromeBackup\%chromeprofdir%" %rcChrmBIF% /E /ZB /COPY:DAT /DCOPY:T /MT:4 /XJ /XF %rcChrmBXF% /XD %rcChrmBXD% /R:10 /W:2 /TBD /NP /V /TS /Log+:"H:\ChromeBackup\ChromeBackup.log"


Wichtige Kommandos
-----------------------------------------------------
@ECHO OFF
Echo ********* chkdsk c: /f /r /x  **********
REM chkdsk c: /f /r /x
REM chkdsk c: /f
Echo ********* Fertig **********
REM pause > nul
exit /b

-----------------------------------------------------
@ECHO OFF
Echo ***  START  ***
sfc /scannow
exit /b
---------------------------------------------------
SET SOURCE_ORDNER=\Daten
call :SubRoutine_RoboCopy

SET SOURCE_ORDNER=\Users\Labor\Desktop
call :SubRoutine_RoboCopy

:
SubRoutine_RoboCopy
REM /IPG:10   Abstand zwischen den paketen um bandbreite vfreizugeben
robocopy /IPG:100
ROBOCOPY      Quelle:   ZIEL:   /MIR /IPG:100   Abstand zwischen den Paketen um Bandbreite freizugeben
exit /b

---------------------------------------------------------------

REM Prüfen, ob das Backup-Verzeichnis da
set remotedir=\\rechner2\backup\

dir %remotedir% >nul 2>&1 || goto nichtda
... Kopieren starten ...
goto ende

:nichta
echo SORRY, Zielverzeichnis nicht verfügbar/ Rechner aus.
goto ende

:ende





MUSTER   .CMDs



set versuche=
set maxversuche=xxxxx
:verbinden
net use x: /delete
net use x: \\server\verzeichnis /persistent:no
if %ERRORLEVEL%==0 goto fertig
set versuche=%versuche%x
if "%versuche%"=="%maxversuche%" goto fehler
ECHO Fehler. Neuer Versuch in 03 Sekunden. (Max. 5 Versuche)
ECHO.
ping 127.0.0.1 -n 4 > nul
goto verbinden

:fehler
ECHO Keine Verbindung zum Server.
ECHO.
 PAUSE
goto fertig




TEST pn Netzwerk Server  geht und setze USER & PASSWORT
:: net use \\[Servername]\IPC$ /user:<Name> <Passwort>
:: robocopy <Quelle> \\<Servername>\Pfad /MIR
:: net use \\<Servername>\IPC$ /DEL

@ECHO OFF
ECHO.
chcp 1252 > nul

ECHO ******** START ************
SET NAS_IP_ADR=132.199.XXX.XXX
ECHO %NAS_IP_ADR%
SET USERLOGIN=/USER:XXXXX   "XXXXXXX"
ECHO %USERLOGIN%

ECHO DUMMY Login um den USER zu automatisieren
ECHO Fehlermeldungen ignorieren.
(net use \\%NAS_IP_ADR%\IPC$ /persistent:NO) || (net use \\%NAS_IP_ADR%\IPC$ /user:%USERLOGIN% /persistent:NO)
if errorlevel 0 then ECHO IPC Test erfolgreich=%errorlevel%
if not errorlevel 0  (net use \\%NAS_IP_ADR%\IPC$  /Delete) & ECHO ERROR=%errorlevel% & GOTO :BEENDEN

net use \\%NAS_IP_ADR%\IPC$  /Delete
if errorlevel 0 then ECHO IPC Delete Test erfolgreich =%errorlevel%
if not errorlevel ECHO IPC Delete Fehler =%errorlevel%

echo.
ECHO READ, Alles OK
echo.
PAUSE
ECHO ******** ENDE *************

:BEENDEN
exit



ROBOCOPY ONLY
Übergabe Qulele ZIEL mit Paramter %1 %2

@ECHO OFF
:: Übergeben werden QuellLaufwerk     %1        C:
::  Source_Ordner                                 %2        \Daten
:: ZielLaufwerk\ZielOrdner                    %3        B:\Backup
:: Bearbeitet 13-10-2018 --  Christof Ermer
:: Umlaute sind ein Problem: Dos verwendet OEM 850 und nicht ANSI oder UTF-8,
:: deshalb: Stelle die Codepage auf chcp 1252
:: ************
chcp 1252

SET SOURCE_SPACE=%1%2
SET ZIEL_SPACE=%3
SET CPU_CORES=4

:: ----------------  Robocopy Start --------------------
:: =================================================================kies
@ECHO Erzeuge Ziel Ordner, falls nicht da.
if not exist %ZIEL_SPACE% md %ZIEL_SPACE%
@ECHO **************************************************************
@ECHO Alle Daten in %SOURCE_SPACE% werden auf %ZIEL_SPACE%  kopiert
@ECHO **************************************************************
:: HELP = ROBOCOPY /?
:: Pfad: ..\..\..\..\..\..\..\..\..\.."\..\Herbst
::  Für den "C:\USER\LocalAdmin"
SET ExludeFolders="Windows" "%1\Windows" "%SOURCE_SPACE%\AppData" "%SOURCE_SPACE%\Anwendungsdaten" "%SOURCE_SPACE%\Lokale Einstellungen" "%SOURCE_SPACE%\Netzwerkumgebung" %SOURCE_SPACE%\Recent" "%SOURCE_SPACE%\Cookies" "%SOURCE_SPACE%"\Druckumgebung"
SET ROBCPY_Arglist=/E /XO /MT:%CPU_CORES% /R:1 /W:1 /V /XA:SH /FFT /DST /IPG:100 /XJD /NP /NDL /XD "ExludeFolders" /log+:"%logfile%"
@ECHO Robocopy-Argumetenliste = %ROBCPY_Arglist%

attrib -h -s %ZIEL_SPACE%
robocopy %SOURCE_SPACE%  %ZIEL_SPACE% %ROBCPY_Arglist%
attrib -h -s %ZIEL_SPACE%
exit /b
:: ----------------  Robocopy   Ende ------------------

:: ---PARAMETER----------------------------------------------------
:: PAUSE
:: https://www.axel-hahn.de/batch/helferlein-und-tabellen/alle-windows-kommandos?id=robocopy
:: https://www.wintotal.de/robocopy-der-kopier-gigant/
:: https://superuser.com/questions/814102/robocopy-command-to-do-an-inc::ental-backup

:: I like to use the following:
:: robocopy "C:\Users\<user>" "F:\robocopy\<user>" /R:0 /XA:SH /E /XO /XD "Downloads" "AppData" /LOG:robocopy.log /TEE

:: %ROBCPY_Arglist%
:: /MIR : Spiegelt eine Verzeichnisstruktur (Entspricht "/E" mit "/PURGE").
:: /E : Kopiert Unterverzeichnisse, einschließlich leerer Unterverzeichnisse.
:: /A : Kopiert nur Dateien mit dem "Archive"-Attribut.
:: /M : Kopiert nur Dateien mit dem "Archive"-Attribut und setzt das Attribut zurück.
:: /XO : Schließt ältere Dateien aus.
:: /XA:SH  No Hiddenfile
::  /FFT : Geht von FAT-Uhrzeitangaben für Dateien aus (Granularität von zwei Sekunden).
::  /DST : Kompensiert Zeitunterschiede von einer Stunden aufgrund der Sommerzeit.
:: /V : Erstellt eine ausführliche Ausgabe mit ausgelassenen Dateien.
::  /NP : Kein Status - der Prozentsatz kopierter Elemente wird nicht angezeigt.
:: /LOG+:Datei :: Gibt den Status der Protokolldatei aus (wird an das vorhandene Protokoll angefügt).
:: /Z : Copy files in restartable mode (survive network glitch).
:: /B : Copy files in Backup mode.
:: /ZB : Use restartable mode; if access denied use Backup mode.  MACHT NUT ÄRGER !!!!
:: /XJD : Exclude Junctioned Directories
:: /TEE : werden die Informationen sowohl in die Kommandozeile als auch in die Logdatei geschrieben
:: /ZB
:: ?? /COPYALL sttat Copy:DATSOU
:: /COPYALL
:: /Copy:DATU
::  /TEE werden die Informationen sowohl in die Kommandozeile als auch in die Logdatei geschrieben
:: /IPG:100   Abstand zwischen den paketen um bandbreite freizugeben
exit





@ECHO OFF
@Echo Bearbeitet 19-10-2018 --  Christof Ermer

REM Aufruf im Windows Scheduler. Passe Labornummer XXXX an
REM C:\Windows\System32\cmd.exe /c ".\Robocopy_DATEN_toNAS_LabXXXX.cmd"

REM Umlaute sind ein Problem: Dos verwendet OEM 850 und nicht ANSI oder UTF-8,
REM deshalb: Stelle die Codepage auf chcp 1252
REM ***************
chcp 1252
REM ***************

REM -----------------------------------------------------------------------------
REM *** HIER die SETs ANPASSEN ****

SET LABOR_RAUM_NR=2021

REM **** Hier kann man das Ziel Laufwerk einstellen, evtl mit SubOrdner
SET ZIEL_LW=B:
SET ZIEL_SUB_Ordner=\RcpyBackup

REM Anzahl der CPU Cores des zu sichernden Rechners
SET CPU_CORES=4
REM -----------------------------------------------------------------------------

SET LOG_ORDNER=\LOGs
SET ROBOLOG=%ZIEL_LW%%LOG_ORDNER%
if not exist %ROBOLOG% md %ROBOLOG%
SET logfile=%ROBOLOG%\%date:~-4%-%date:~3,2%-%date:~0,2%_robocopy_log_Lab_%LABOR_RAUM_NR%.txt
DEL %ROBOLOG%\*%LABOR_RAUM_NR%.txt
@ECHO Neue Protokolldatei : %logfile%le

@ECHO ************************** START der Sicherung ************************
date /t
time /T

REM *** Es werden nur ausgesuchte Ornder gesichert. Das ist der sicherste Weg ***
REM *** Kopiere so viele Sektionen wie gebraucht ***
REM *** Trage SOURCE_LW und SOURCE_ORDNER getrent ein. ***

REM ............. Anpassen und einfügen wenn verändert. ...............  

SET SOURCE_LW=C:

REM .............  
REM Ordnernamen mit {LEER Zeichen} funktionieren nicht
REM Lösung:Klammere d. {Ordner Name}, mit "" Bsp: "Eigene Dateien"

REM C:\Batch-NAS
SET SOURCE_ORDNER=\Batch-NAS
call :SubRoutine_RoboCopy

REM C:\Users\LocalAdmin
SET SOURCE_ORDNER=\Users\LocalAdmin
call :SubRoutine_RoboCopy



REM C:\Users\LocalAdmin\Desktop
REM SET SOURCE_ORDNER=\Users\LocalAdmin\Desktop
REM call :SubRoutine_RoboCopy


REM C:\Daten
SET SOURCE_ORDNER=\Daten
call :SubRoutine_RoboCopy

REM C:\drivers
SET SOURCE_ORDNER=\drivers
call :SubRoutine_RoboCopy

REM C:\FMC Quick Access
SET SOURCE_ORDNER=\"FMC Quick Access"
call :SubRoutine_RoboCopy

SET SOURCE_ORDNER=\Geräte
call :SubRoutine_RoboCopy

REM C:\HyperTermXP
SET SOURCE_ORDNER=\HyperTermXP
call :SubRoutine_RoboCopy

REM C:\IDE
SET SOURCE_ORDNER=\IDE
call :SubRoutine_RoboCopy

REM C:\Install_Backup
SET SOURCE_ORDNER=\Install_Backup
call :SubRoutine_RoboCopy

REM C:\Installs
SET SOURCE_ORDNER=\Installs
call :SubRoutine_RoboCopy

REM LabView_VI's
SET SOURCE_ORDNER=\"LabView_VI's"
call :SubRoutine_RoboCopy

REM C:\Manuals
SET SOURCE_ORDNER=\Manuals
call :SubRoutine_RoboCopy

REM C:\rsync
SET SOURCE_ORDNER=\rsync
call :SubRoutine_RoboCopy


@ECHO ************************** ENDE der Sicherung ************************
date /t
time /T

REM *** Verlasse das Batch ***
REM pause
exit /b

REM ------------------------------------------------------------------

REM ----------------  Subroutine  Start ------------------------------
:SubRoutine_RoboCopy
@ECHO OFF
SET SOURCE_SPACE=%SOURCE_LW%%SOURCE_ORDNER%
SET ZIEL_SPACE=%ZIEL_LW%%ZIEL_SUB_Ordner%%SOURCE_ORDNER%
@ECHO Erzeuge Ziel Ordner, falls nicht da.
if not exist %ZIEL_SPACE% md %ZIEL_SPACE%
@ECHO Quellverzeichnis: %SOURCE_SPACE%
@ECHO Zielverzeichnis : %ZIEL_SPACE%
@ECHO ******************************************************************
@ECHO Alle Daten in %SOURCE_SPACE% werden auf %ZIEL_SPACE%  kopiert
@ECHO ******************************************************************
REM *** Hier nichts verändern  ***
REM HELP = ROBOCOPY /?
SET ROBCPY_Arglist=/E /XO /MT:%CPU_CORES% /R:1 /W:1 /V /XA:SH /FFT /DST /NP /NDL /XD "C:\Windows  /log+:"%logfile%"
@ECHO Robocopy-Argumentenliste = %ROBCPY_Arglist%
attrib -h -s %ZIEL_SPACE%
robocopy %SOURCE_SPACE%  %ZIEL_SPACE% %ROBCPY_Arglist%
attrib -h -s %ZIEL_SPACE%
exit /b
REM ----------------  Subroutine  Ende ------------------------------

REM ------------------------------------------------------------------
REM PAUSE
REM https://www.axel-hahn.de/batch/helferlein-und-tabellen/alle-windows-kommandos?id=robocopy
REM https://www.wintotal.de/robocopy-der-kopier-gigant/
REM https://superuser.com/questions/814102/robocopy-command-to-do-an-incremental-backup

REM I like to use the following:
REM robocopy "C:\Users\<user>" "F:\robocopy\<user>" /R:0 /XA:SH /E /XO /XD "Downloads" "AppData" /LOG:robocopy.log /TEE
exit


BEISPIELE BEISPIELE BEISPIELE BEISPIELE BEISPIELE BEISPIELE BEISPIELE BEISPIELE BEISPIELE BEISPIELE BEISPIELE BEISPIELE BEISPIELE BEISPIELE BEISPIELE BEISPIELE

{FENSTER*R]   --> cvcontrol userpasswords2


::  NETZWERK TESTEN
SET tonixp=132.19..100.145

BSP:    
ping %tonixp% | find /i "Reply" && goto :nostart || goto :lanstart1
ping

:nostart
net use z: /d
net use z: \\132.199.100.145\tmp
exit /b

:lanstart1
D:\usage\Sikostart\LANStartCMD.exe 00-22-2E-41-6F-14
ping -n 40 %tonixp% | find /i "Reply" && goto :lanstart2 || goto :lanstart1

:lanstart2
ping -n 20 %tonixp%
net use z: /d
 
net use z: \\%tonixp%\sikoneu
 
xcopy /D /E /Y /C /H /F d:\*.* z:\
 rem net use z: /d
 
D:\usage\Sikostart\shutdown -f -s -m \\%tonixp%
 
ping -n 10 %tonixp%
 
D:\usage\Sikostart\shutdown -f -s -m \\%tonixp%
 
ping -n 10 %tonixp%
 
D:\usage\Sikostart\shutdown -f -s -m \\%tonixp%
 exit




BEISPIELE:

Set ROOT=%~dp0
call :GetFullPath "%ROOT%\.." ROOT
set SCRIPT_NAME=%~nx0

where /q libmmd.dll || echo Warning: libmmd.dll couldn't be found in %%PATH%%. Please check if the redis.......................

if exist "%INTEL_OPENVINO_DIR%\deployment_tools\inference_engine\bin\intel64\arch_descriptions" (  ..... )


: Check if Python is installed
python --version 2>NUL
if errorlevel 1 (
   echo Error^: Python is not installed. Please install Python 3.5. or 3.6  ^(64-bit^) from https://www.python.org/downloads/
   exit /B 1
)

:: Check Python version
for /F "tokens=* USEBACKQ" %%F IN (`python --version 2^>^&1`) DO (
   set version=%%F
)
echo %var%



UNINSTALLER.BAT von ECLIPSE

@echo off

set INSTALL_DIR="%~dp0"\..

if not exist %INSTALL_DIR%\Uninstaller\uninstaller.jar (
    echo "IZpack uninstaller is missing, abort..."
    pause
    exit /B 1
)

rem Find if Java is install somewhere on the system
for /F "tokens=* USEBACKQ" %%F in (`where javaw.exe`) do (
    set JAVA="%%F"
    goto EOLOOP
)

:EOLOOP
if exist %JAVA% goto UNINSTALL

rem Java not found try with internal JRE
if not exist %INSTALL_DIR%\jre goto UNINSTALL
set SW_TMP="%TMP%"\sw4stm32_uninstaller
rmdir /S /Q %SW_TMP%
mkdir %SW_TMP%
move /Y %INSTALL_DIR%\jre %SW_TMP% >NUL
set JAVA=%SW_TMP%\jre\bin\javaw.exe

:UNINSTALL
echo Starting uninstaller...
%JAVA% -jar %INSTALL_DIR%\Uninstaller\uninstaller.jar
timeout /T 5 /NOBREAK



BESPIEL


@echo off &setlocal
rem überprüfen, ob im richtigen WLAN (also zu Hause) angemeldet
rem die SSID wird in der Variable "SSID" gespeichert

for /f "tokens=1* delims=:" %%i in (
'netsh wlan show interfaces ^| findstr /rxc:"[ ]* SSID [ ]*: ..*"'
) do for /f "tokens=*" %%k in ("%%j") do set "SSID=%%k"
if "%SSID%" NEQ "MyNetwork" goto :Abbruch

:CheckForNAS
REM errorlevel 1 heisst groesser oder gleich!
set /a counter+=1
set result=false
tracert media-store | find "Zielhost nicht erreichbar"

if errorlevel == 1 goto da
if errorlevel == 0 goto nichts
goto nichts

:da
echo NAS gefunden
goto Netzlaufwerke_verbinden

:nichts
echo NAS nicht gefunden
echo %counter%. Versuch
REM spätestens nach dem 4.Versuch sollte das NAS gestartet sein
if %counter% EQU 1 set result=true
if %counter% EQU 5 set result=true
if %counter% EQU 10 goto Abbruch

if "%result%"=="true" (
c:
cd "C:\Program Files (x86)\WOL2"
WOL2.exe -file C:\Users\Klaus.User1\Documents\hosts.xml -wake Media-Store.fritz.box -close
GOTO CheckForNAS
) ELSE (
TIMEOUT /T 30
GOTO CheckForNAS
)

:Netzlaufwerke_verbinden
REM noch mal prüfen, ob das NAS tatsächlich vorhanden ist
for /f %%a in ('ping 192.168.178.10 ^|find /C "Antwort von"') do (
if %%a EQU 4 (
echo "Laufwerke zum Media-Store (NAS) einrichten."
timeout 10
SET HOMESDrive=V:
SET PhotoDrive=W:
SET MusikDrive=X:
SET VideoDrive=Y:
if not exist %MusikDrive% (net use %MusikDrive% \\192.168.178.10\music /persistent:no /user:limitedUser1 Password )
if not exist %VideoDrive% (net use %VideoDrive% \\192.168.178.10\video /persistent:no /user:limitedUser1 Password )
if not exist %HOMESDrive% (net use %HOMESDrive% \\192.168.178.10\home /persistent:no /user:limitedUser1 Password )
if not exist %PhotoDrive% (net use %PhotoDrive% \\192.168.178.10\photo /persistent:no /user:limitedUser1 Password )
)
)
TIMEOUT /T 5
goto Ende

:Abbruch
echo Du bist nicht im Netzwerk "MyNetwork" angemeldet oder
echo die Verbindung kann aus einem anderen Grund nicht hergestelt werden
echo --> Abbruch

:Ende
Pause