ezio1415
Goto Top

Batch: Ordner Auswahl via Explorer

Hallo

Ich habe momentan eine kleine "Schulaufgabe". Die idee ist es eine Batch Datei zu schreiben, welches ein Backup macht. Das Hauptgerüst oder die Grundfunktionen funktionieren prima, jedoch möchte Ich ein paar Feinheiten machen. Ich wollte euch fragen ob Ihr mir weiterhelfen könnt, warum der Code in meiner Batch Datei nicht mehr funktioniert, aber wenn man dies normal abspeichert schon. Die Fehlermeldung die ich erhalte lautet wie folgt: (109, 1)Kompilierungsfehler in Microsoft JScript: Syntaxfehler. Ich finde den Fehler leider nicht. Wenn es geht sollte man dies nur in Batch machen können, also nicht eine seperate .vbs oder .bat Datei und diese Aufrufen. Abgabe ist nur eine Datei.
Falls es möglich ist, kann wäre es sehr gut wenn man in der Batch Datei eine andere vbs, bat Datei erstellt und diese später dann löscht.
Könnt Ihr mir weiter helfen

Hier ist mein Code:

@if (@CodeSection == @batch) @then
@echo off
/*@cc_on @*/
chcp 1252
set ae=ä
set oe=ö
set ue=ü
chcp 850
title Modul 143 Backup Datei
REM Formatierung für die Batch Datei
mode con lines=60 cols=120
color a
REM Erstellt eine .VBS Datei, welche eine Messagebox generiert.
Echo msgbox"Bitte schliessen Sie alle Programme",0,"Erinnerung" >Test.vbs REM Generiert einen Textbox mit den Text "Bitte schliessen Sie alle Programme"

ping localhost -n 3 -w 1000 >NUL
REM Startet die VBS Datei
start Test.vbs

goto main
:main
cls
echo *
echo * *
echo * Backup und Restore - Hauptmen *
echo * %Date% %Time% *
echo *
echo * Bitte waehlen Sie nun die gewnschte Backup-Art aus *
echo *
echo * [1] Voll Backup *
echo * [2] Differenzielles Backup *
echo * [3] Inkrementelles Backup *
echo * [4] Credits *
echo * [5] Pc Cleanup *
echo * [6] Beenden *
echo

:as
set /P choice="W%ae%hlen Sie eine Option:" REM Verlangt eine Eingabe von dem Benutzer (Zahl 1-5)
if "%choice%"=="1" goto Full REM Mit der Eingabetaste 1 macht man ein Full Backup
if "%choice%"=="2" goto diff REM Mit der Eingabetaste 2 macht man ein Differenzielles Backup
if "%choice%"=="3" goto ink REM Mit der Eingabetaste 3 macht man ein Inkrementelles Backup
if "%choice%"=="4" goto cred REM Mit der Eingabetaste 4 geht man zu den Credits
if "%choice%"=="6" goto end REM Mit der Eingabetaste 5 beendet man die Batch Datei
if "%choice%"=="5" goto menu REM Mit der Eingabetaste 5 beendet man die Batch Datei
echo Bitte geben Sie eine Zahl an!
goto as

:Full
DEL Test.vbs REM Löscht die generierte .VBS Datei
cls
echo --------------------------------------------------------------------------------
echo Full Backup
echo --------------------------------------------------------------------------------
echo.
ECHO Bitte w%ae%hlen Sie eine Option
echo ===============================
echo [1] Voll Backup durchf%ue%hren
echo [2] Backup wiederherstellen
echo.
goto Fullm

:Fullm
REM Verlangt eine Eingabe vom Benutzer. Er kann entweder ein Backup machen, indem er die Taste 1 betätigt oder einen Restore mit der Taste 2.
set /p op=Option:
if "%op%"=="1" goto Backup
if "%op%"=="2" goto Restore
echo Bitte w%ae%hlen Sie eine Option aus
goto Fullm

:Backup
echo --------------------------------------------------------------------------------
echo Full Backup
echo --------------------------------------------------------------------------------
echo.
ECHO Zum Starten der Datensicherung dr%ue%cken Sie eine beliebige Taste.
echo ===================================================================
PAUSE
ECHO.
REM Zeigt die Zeit an
ECHO Zeit:
TIME /t
ECHO.
REM Dies ist der Quellpfad. Src ist die Variabel dafür
SET src="C:\Users\Brisacher\Videos"

echo Select a folder:
pause

for /F "delims=" %%a in ('CScript nologoE:JScript "%~F0"') do (
set Destination_Folder=%%a
)
echo "%Destination_Folder%"
pause>nul
:EXIT
exit


@end

Creates a dialog box that enables the user to select a folder and display it.
var title = "Select a folder", rootFolder = 0;
var shl = new ActiveXObject("Shell.Application");
var folder = shl.BrowseForFolder(0, title, 0, rootFolder);
WScript.Stdout.WriteLine(folder ? folder.self.path : "");


:em
REM Wenn der Zielordner mit dem Datum nicht existiert, soll einer erstellt werden.
if not exist %Destination_Folder%\%DATE% md %selectedFolder%\Full_%DATE%
REM Hier wird der Pfad vom Logifle definiert
SET log=%Destination_Folder%\Full Backuplog.txt"
ECHO Datensicherung gestartet!
REM Hier wird das Backup gemacht mit den entsprechenden Parameter von Robocopy
ATTRIB %src% +A
ROBOCOPY %src% %Destination_Folder%\Full_%DATE% /BYTES /MIR /ETA /R:1 /W:1 /UNICODE /R:9 /W:30 /log+:%log% /TEE
goto Backupf

:Backupf
REM Der Benutzer muss eine Eingabe mit 1 oder 5 machen, um ins Hauptmenü zurückzukehren oder das Programm zu beenden
set /P choice="Wollen Sie ins Hauptmen%ue% zur%ue%ckzukehren (Taste 1) oder das Programm beenden (Taste 5):" REM Verlangt eine Eingabe von dem Benutzer (Zahl 1-5)
if "%choice%"=="1" goto main REM Mit der Eingabetaste 0 kehrt man zum Hauptmenü zurück.
if "%choice%"=="5" goto end REM Mit der Eingabetaste 5 beendet man das Programm.
REM Falls eine ungültige Eingabe gemacht wird erscheint die Nachricht hier unten.
echo Bitte w%ae%hlen Sie eine Option aus
goto Backupf

:Restore
echo --------------------------------------------------------------------------------
echo Full Backup Restore
echo --------------------------------------------------------------------------------
echo.
ECHO Zum Starten der Datenwiederherstellung dr%ue%cken Sie eine beliebige Taste.
echo ===================================================================
PAUSE
REM Verlangt dass der Benutzer das Datum vom Backup angibt, welches er wiederherstellen möchte.
set /P mom="Bitte geben Sie ein Datum vom Backup an (z.B %Date%):"
REM Holt die Backupdaten vom entsprechenden Ordner und kopiert diese im Quellpfad
xcopy %selectedFolder%\Full_%mom% "C:\Users\Brisacher\Videos"
goto Restoref

:Restoref
REM Der Benutzer muss eine Eingabe mit 1 oder 5 machen, um ins Hauptmenü zurückzukehren oder das Programm zu beenden
set /P choice2="Wollen Sie ins Hauptmen%ue% zur%ue%ckzukehren (Taste 1) oder das Programm beenden (Taste 5):" REM Verlangt eine Eingabe von dem Benutzer (Zahl 1-5)
if "%choice2%"=="1" goto main REM Mit der Eingabetaste 1 kehrt man zum Hauptmenü zurück.
if "%choice2%"=="5" goto end REM Mit der Eingabetaste 5 beendet man das Programm.
echo Bitte w%ae%hlen Sie eine Option aus!
goto Restoref

:diff
DEL Test.vbs REM Löscht die generierte .VBS Datei
cls
echo --------------------------------------------------------------------------------
echo Differentielles Backup
echo --------------------------------------------------------------------------------
echo.
ECHO Bitte w%ae%hlen Sie eine Option
echo ===============================
echo [1] Differentielles Backup durchf%ue%hren
echo [2] Backup wiederherstellen
echo.

:diffm
set /p op=Option:
if "%op%"=="1" goto diffb
if "%op%"=="2" goto Restored
REM Verlangt eine Eingabe vom Benutzer
echo Bitte w%ae%hlen Sie eine Option aus
goto diffm

:diffb
cls
echo --------------------------------------------------------------------------------
echo Differentielles Backup
echo --------------------------------------------------------------------------------
echo.
ECHO Zum Starten der Datensicherung dr%ue%cken Sie eine beliebige Taste.
echo ===================================================================
PAUSE
ECHO.
ECHO Zeit:
TIME /t
ECHO Datensicherung gestartet!
ECHO.
REM Dies ist der Quellpfad. Src ist die Variabel dafür
SET src="C:\Users\Brisacher\Videos"
REM Hier wird der Zielpfad definiert. Benutzer kann eine Verzechnissturktur aller Ordner sehen, damit er den Zielpfad eingeben kann.
echo Bitte w%ae%hlen Sie einen Ordner aus. Um eine Ordnerstruktur zu öffnen dr%ue%cken Sie + (z.B. 1+).

REM Wenn der Zielordner mit dem Datum nicht existiert, soll einer erstellt werden.
if not exist %selectedFolder%\%DATE% md %dest%\Diff_%DATE%
REM Hier wird der Pfad vom Logifle definiert
SET log="%selectedFolder%\Differentes Backuplog.txt"
REM Hier wird das Backup gemacht mit den entsprechenden Parameter von Robocopy
ROBOCOPY %src% %selectedFolder%\Diff_%DATE% /E /r:1 /w:1 /A /ETA /UNICODE /W:30 /log+:%log% /TEE
echo Dateien erfolgreich kopiert.
goto diffbe

:diffbe
set /P choice="Wollen Sie ins Hauptmen%ue% zur%ue%ckzukehren (Taste 1) oder das Programm beenden (Taste 5):" REM Verlangt eine Eingabe von dem Benutzer (Zahl 1-5)
if "%choice%"=="1" goto main REM Mit der Eingabetaste 1 kehrt man zum Hauptmenü zurück.
if "%choice%"=="5" goto end REM Mit der Eingabetaste 5 beendet man das Programm.
echo Bitte w%ae%hlen Sie eine Option aus
goto diffbe

:Restored
echo --------------------------------------------------------------------------------
echo Differentielles Backup Restore
echo --------------------------------------------------------------------------------
echo.
ECHO Zum Starten der Datenwiederherstellung dr%ue%cken Sie eine beliebige Taste.
echo ===========================================================================
PAUSE
set /P Angabe="Bitte geben Sie ein Datum vom Backup an (z.B %Date%):"
xcopy %selectedFolder%\Diff_%Angabe% "C:\Users\Brisacher\Videos"
goto Restoredi

:Restoredi
set /P choice="Wollen Sie ins Hauptmen%ue% zur%ue%ckzukehren (Taste 1) oder das Programm beenden (Taste 5):" REM Verlangt eine Eingabe von dem Benutzer (Zahl 1-5)
if "%choice%"=="1" goto main REM Mit der Eingabetaste 1 kehrt man zum Hauptmenü zurück.
if "%choice%"=="5" goto end REM Mit der Eingabetaste 5 beendet man das Programm.
echo Bitte w%ae%hlen Sie eine Option aus
goto Restoredi

:ink
DEL Test.vbs REM Löscht die generierte .VBS Datei
cls
echo --------------------------------------------------------------------------------
echo Inkrementes Backup
echo --------------------------------------------------------------------------------
echo.
ECHO Bitte w%ae%hlen Sie eine Option
echo ===============================
echo [1] Inkrementes Backup durchf%ue%hren
echo [2] Backup wiederherstellen
echo.

:inkm
set /p op=Option:
if "%op%"=="1" goto inkb
if "%op%"=="2" goto Restorek
echo Bitte w%ae%hlen Sie eine Option aus
goto inkm

:inkb
cls
echo --------------------------------------------------------------------------------
echo Inkrementes Backup
echo --------------------------------------------------------------------------------
echo.
ECHO Zum Starten der Datensicherung dr%ue%cken Sie eine beliebige Taste.
echo ===================================================================
PAUSE
ECHO.
ECHO Zeit:
TIME /t
ECHO Datensicherung gestartet!
ECHO.

SET src="C:\Users\Brisacher\Videos"
REM Hier wird der Zielpfad definiert. Benutzer kann eine Verzechnissturktur aller Ordner sehen, damit er den Zielpfad eingeben kann.
echo Bitte w%ae%hlen Sie einen Ordner aus. Um eine Ordnerstruktur zu öffnen dr%ue%cken Sie + (z.B. 1+).

REM Wenn der Benutzer kein Zielpfad eingibt, geht die Batch zurück zum Anfang.
if not exist %selectedFolder%\%DATE% md %dest%\Ink_%DATE%
SET log="%selectedFolder%\Inkrementes Backuplog.txt"
ROBOCOPY %src% %selectedFolder%\Ink_%DATE% /E /r:1 /w:1 /M /ETA /UNICODE /log+:%log% /TEE
echo Dateien erfolgreich kopiert.
goto inkbf

:inkbf
set /P choice="Wollen Sie ins Hauptmen%ue% zur%ue%ckzukehren (Taste 1) oder das Programm beenden (Taste 5):" REM Verlangt eine Eingabe von dem Benutzer (Zahl 1 oder 5)
if "%choice%"=="1" goto main REM Mit der Eingabetaste 1 kehrt man zum Hauptmenü zurück.
if "%choice%"=="5" goto end REM Mit der Eingabetaste 5 beendet man das Programm.
echo Bitte w%ae%hlen Sie eine Option aus
goto inkbf

:Restorek

echo --------------------------------------------------------------------------------
echo Inkrementes Backup Restore
echo --------------------------------------------------------------------------------
echo.
ECHO Zum Starten der Datenwiederherstellung dr%ue%cken Sie eine beliebige Taste.
echo ===========================================================================
PAUSE
set /P Angabe="Bitte geben Sie ein Datum vom Backup an (z.B %Date%):"
xcopy %selectedFolder%\Ink_%Angabe% "C:\Users\Brisacher\Videos"
goto Restoreki

:Restoreki
set /P choice="Wollen Sie ins Hauptmen%ue% zur%ue%ckzukehren (Taste 1) oder das Programm beenden (Taste 5):" REM Verlangt eine Eingabe von dem Benutzer (Zahl 1-5)
if "%choice%"=="1" goto main REM Mit der Eingabetaste 1 kehrt man zum Hauptmenü zurück.
if "%choice%"=="5" goto end REM Mit der Eingabetaste 5 beendet man das Programm.
echo Bitte w%ae%hlen Sie eine Option aus
goto Restoreki

:cred
cls
color 08
mode con lines=60 cols=120
color a
echo ´´~``
echo ( o o )
echo ---------------.oooO (_) Oooo.----------------------------------------------
echo.
echo Modul 143 Dylan Brisacher
echo =========================
echo.
echo F%ue%r die Datensicherung wurde Robocopy verwendet
echo.
echo Dr%ue%cken Sie 0 um ins Hauptmen%ue% zu gehen
echo oder
echo Dr%ue%cken Sie 5 um das Programm zu beenden
echo Verwendete Links:
echo http://de.wikibooks.org/wiki/Batch-Programmierung:_Batch-Befehle#IF
echo http://www.robvanderwoude.com/batexamples.php
echo http://de.wikibooks.org/wiki/Datensicherung:_Seiten
echo oooO
echo ( ) Oooo
echo -----------------\ (----( )------------------------------------------------
echo \_) ) /
echo (_/
echo.
goto credi

:credi
set /P choice="Wollen Sie ins Hauptmen%ue% zur%ue%ckzukehren (Taste 1) oder das Programm beenden (Taste 5):"
if "%choice%"=="1" goto main REM Mit der Eingabetaste 0 kehrt man zum Hauptmenü zurück.
if "%choice%"=="5" goto end REM Mit der Eingabetaste 5 beendet man das Programm.
echo Bitte w%ae%hlen Sie eine Option aus
goto credi

:menu
cls
echo --------------------------------------------------------------------------------
echo PC Cleanup
echo --------------------------------------------------------------------------------
echo.
echo W%ae%hlen Sie eine Option
echo =========================
echo.
echo [1] Internet Cookies l%oe%schen
echo [2] Temporaere Internet Dateien l%oe%schen
echo [3] Festplatte s%ae%ubern
echo [4] Festplatte Defragmentierung
echo [5] Zur%ue%ck ins Hauptmen%ue%
echo [6] Beenden
echo.
set /p op=Option:
if "%op%"=="1" goto 1
if "%op%"=="2" goto 2
if "%op%"=="3" goto 3
if "%op%"=="4" goto 4
if "%op%"=="5" goto main
if "%op%"=="6" goto end
goto menu
:1
cls
echo --------------------------------------------------------------------------------
echo Internet Cookies l%o%eschen
echo --------------------------------------------------------------------------------
echo.
echo L%oe%sche Cookies...
ping localhost -n 3 >nul
del /f /q "%userprofile%\Cookies\*.*"
cls
echo --------------------------------------------------------------------------------
echo Internet Cookies l%oe%schen
echo --------------------------------------------------------------------------------
echo.
echo Cookies gel%oe%scht.
echo.
echo Dr%ue%cken Sie eine beliebige Taste. . .
pause >nul
goto menu

:2
cls
echo --------------------------------------------------------------------------------
echo Tempor%ae%re Internet Dateien l%oe%schen
echo --------------------------------------------------------------------------------
echo.
echo L%oe%sche tempor%ae%re Internet Dateien...
ping localhost -n 3 >nul
del /f /q "%userprofile%\AppData\Local\Microsoft\Windows\Temporary Internet Files\*.*"
cls
echo --------------------------------------------------------------------------------
echo Tempor%ae%re Internet Dateien l%oe%schen
echo --------------------------------------------------------------------------------
echo.
echo Tempor%ae%re Internet Dateien gel%oe%scht.
echo.
echo Dr%ue%cken Sie eine beliebige Taste. . .
pause >nul
goto menu

:3
cls
echo --------------------------------------------------------------------------------
echo Festplatte s%ae%ubern
echo --------------------------------------------------------------------------------
echo.
echo Festplatte S%ae%uberung l%ae%uft...
ping localhost -n 3 >nul
if exist "C:\WINDOWS\temp"del /f /q "C:WINDOWS\temp\*.*"
if exist "C:\WINDOWS\tmp" del /f /q "C:\WINDOWS\tmp\*.*"
if exist "C:\tmp" del /f /q "C:\tmp\*.*"
if exist "C:\temp" del /f /q "C:\temp\*.*"
if exist "%temp%" del /f /q "%temp%\*.*"
if exist "%tmp%" del /f /q "%tmp%\*.*"
if not exist "C:\WINDOWS\Users\*.*" goto skip
if exist "C:\WINDOWS\Users\*.zip" del "C:\WINDOWS\Users\*.zip" /f /q
if exist "C:\WINDOWS\Users\*.exe" del "C:\WINDOWS\Users\*.exe" /f /q
if exist "C:\WINDOWS\Users\*.gif" del "C:\WINDOWS\Users\*.gif" /f /q
if exist "C:\WINDOWS\Users\*.jpg" del "C:\WINDOWS\Users\*.jpg" /f /q
if exist "C:\WINDOWS\Users\*.png" del "C:\WINDOWS\Users\*.png" /f /q
if exist "C:\WINDOWS\Users\*.bmp" del "C:\WINDOWS\Users\*.bmp" /f /q
if exist "C:\WINDOWS\Users\*.avi" del "C:\WINDOWS\Users\*.avi" /f /q
if exist "C:\WINDOWS\Users\*.mpg" del "C:\WINDOWS\Users\*.mpg" /f /q
if exist "C:\WINDOWS\Users\*.mpeg" del "C:\WINDOWS\Users\*.mpeg" /f /q
if exist "C:\WINDOWS\Users\*.ra" del "C:\WINDOWS\Users\*.ra" /f /q
if exist "C:\WINDOWS\Users\*.ram" del "C:\WINDOWS\Users\*.ram"/f /q
if exist "C:\WINDOWS\Users\*.mp3" del "C:\WINDOWS\Users\*.mp3" /f /q
if exist "C:\WINDOWS\Users\*.mov" del "C:\WINDOWS\Users\*.mov" /f /q
if exist "C:\WINDOWS\Users\*.qt" del "C:\WINDOWS\Users\*.qt" /f /q
if exist "C:\WINDOWS\Users\*.asf" del "C:\WINDOWS\Users\*.asf" /f /q

:skip
if not exist C:\WINDOWS\Users\Users\*.* goto skippy /f /q
if exist C:\WINDOWS\Users\AppData\Temp\*.zip del C:\WINDOWS\Users\Users\*.zip /f /q
if exist C:\WINDOWS\Users\AppData\Temp\*.exe del C:\WINDOWS\Users\Users\*.exe /f /q
if exist C:\WINDOWS\Users\AppData\Temp\*.gif del C:\WINDOWS\Users\Users\*.gif /f /q
if exist C:\WINDOWS\Users\AppData\Temp\*.jpg del C:\WINDOWS\Users\Users\*.jpg /f /q
if exist C:\WINDOWS\Users\AppData\Temp\*.png del C:\WINDOWS\Users\Users\*.png /f /q
if exist C:\WINDOWS\Users\AppData\Temp\*.bmp del C:\WINDOWS\Users\Users\*.bmp /f /q
if exist C:\WINDOWS\Users\AppData\Temp\*.avi del C:\WINDOWS\Users\Users\*.avi /f /q
if exist C:\WINDOWS\Users\AppData\Temp\*.mpg del C:\WINDOWS\Users\Users\*.mpg /f /q
if exist C:\WINDOWS\Users\AppData\Temp\*.mpeg del C:\WINDOWS\Users\Users\*.mpeg /f /q
if exist C:\WINDOWS\Users\AppData\Temp\*.ra del C:\WINDOWS\Users\Users\*.ra /f /q
if exist C:\WINDOWS\Users\AppData\Temp\*.ram del C:\WINDOWS\Users\Users\*.ram /f /q
if exist C:\WINDOWS\Users\AppData\Temp\*.mp3 del C:\WINDOWS\Users\Users\*.mp3 /f /q
if exist C:\WINDOWS\Users\AppData\Temp\*.asf del C:\WINDOWS\Users\Users\*.asf /f /q
if exist C:\WINDOWS\Users\AppData\Temp\*.qt del C:\WINDOWS\Users\Users\*.qt /f /q
if exist C:\WINDOWS\Users\AppData\Temp\*.mov del C:\WINDOWS\Users\Users\*.mov /f /q

:skippy
if exist "C:\WINDOWS\ff*.tmp" del C:\WINDOWS\ff*.tmp /f /q
if exist C:\WINDOWS\ShellIconCache del /f /q "C:\WINDOWS\ShellI~1\*.*"
cls
echo --------------------------------------------------------------------------------
echo Festplatte s%ae%ubern
echo --------------------------------------------------------------------------------
echo.
echo Festplatte erfolgreich ges%ae%ubert!
echo.
pause
goto menu

:4
cls
echo --------------------------------------------------------------------------------
echo Festplatte Defragmentierung
echo --------------------------------------------------------------------------------
echo.
echo Defragmentiere Festplatte...
ping localhost -n 3 >nul
defrag -c -v
cls
echo --------------------------------------------------------------------------------
echo Festplatte Defragmentierung
echo --------------------------------------------------------------------------------
echo.
echo Festplatte Defragmentierung erfolgreich!
echo.
pause
goto menu

:error
cls
echo Befehl wurde nicht erkannt.
ping localhost -n 4 >nul
goto menu

:end
DEL Test.vbs
exit

Hier ist der Code für die Ordnerauswahl. Wenn Ihr diese als .bat speichert funktioniert es tadelos.

@if (@CodeSection == @batch) @then

@echo off
echo Select a folder:
pause

for /F "delims=1" %%a in ('CScript
nologo E:JScript "%~F0"') do (
set Destination_Folder=%%a
)
echo "%Destination_Folder%"
pause>nul
:EXIT
exit

@end

Creates a dialog box that enables the user to select a folder and display it.
var title = "Select a folder", rootFolder = 0;
var shl = new ActiveXObject("Shell.Application");
var folder = shl.BrowseForFolder(0, title, 0, rootFolder);
WScript.Stdout.WriteLine(folder ? folder.self.path : "");

Content-Key: 217030

Url: https://administrator.de/contentid/217030

Printed on: April 16, 2024 at 14:04 o'clock

Member: ezio1415
ezio1415 Sep 16, 2013 updated at 09:57:14 (UTC)
Goto Top
Hallo, die Frage hat sich geklärt, habe konnte das Problem beheben. Falls jemand die aktuelle Batch Datei möchte, kann er mich ruhig anschreiben