Wie kann ich einem Benutzer erlauben, zu kopierende Verzeichnisse auszuwählen?

0

Ich versuche eine Batch-Datei zu schreiben, die hauptsächlich zum Kopieren von Zielen verwendet wird. Jetzt möchte ich es schaffen, wo andere Benutzer es verwenden können, ohne die Verzeichnisse und Ziele bearbeiten zu müssen. Gibt es eine Möglichkeit für mich, die Batchdatei an die Stelle zu schreiben, an der sie angezeigt wird, und nach dem Verzeichnis zu fragen, das der Benutzer kopieren möchte, und nach dem Laufwerk, auf das er es kopieren möchte?

Dies ist, was ich jetzt für eine Weile benutze.

@echo off
:: variable
set backupdir="Destination"
set backupcmd=xcopy /e /h /f /y /v /c /i /r /g /k /d
echo.
echo +++ Backing Up Data +++
echo.
echo.
%backupcmd% "Directory\*.*" "%backupdir%\Data"
timeout /t 2
cls
echo Backup Complete
echo.
echo.
timeout /t 2
cls
echo.
echo +++ Now taking hidden and system attributes off of folders +++
echo.
echo.
echo.
attrib -s -h "Destination\Data"
echo.
echo.
timeout /t 3

Und gibt es eine Möglichkeit, dies mit xcopy zu verbessern?

JustinD
quelle
Art set /? und sehen, wie man es benutzt SET /P variable=[promptString] um Benutzereingaben zu erhalten.
Karan
auch Befehlszeilenparameter werden als bezeichnet %0 (für das aktuelle Programm oder den aktuellen Befehl) und %1-%9 für übergebene Parameter. So können Sie eine neue Batch-Datei mit der Zeile erstellen call backup.bat c:\source c:\destination und verwenden %1 zur Bezugsquelle und %2 zum Referenzziel. Keine Antwort, da keine Eingabeaufforderung verarbeitet wird. Robocopy ist auch ein großartiges Tool für Sicherungszwecke und gehört zur Standardinstallation von Windows 7.
horatio

Antworten:

1

Es gibt ein paar Möglichkeiten:

1) Verwenden Sie Befehlszeilenargumente.

Der Benutzer würde es gerne ausführen backup.bat c:\SourcePath d:\DestinationPath

Verwenden Sie dann% 1 und% 2 (usw.) in der Batchdatei, um die angegebenen Argumente zu verwenden.

So etwas wie

set backupdir=%2

und

%backupcmd% "%1\*.*" "%backupdir%\Data"

Mehr Info: Übergeben von Befehlszeilenparametern in einer Stapeldatei

2) Verwenden Sie die Eingabeaufforderungsfunktion ( /P ) von Set So fordern Sie den Benutzer zur Eingabe von Informationen auf, um die Variable mit folgenden Daten zu füllen:

Beispiel: SET /P variable=[promptString]

Sie könnten also etwas tun wie:

set /P backupdir="Enter Destination Path: "
set /P sourcedir="Enter Source Path: "

Wenn es zu diesen Zeilen im Stapel kommt, stoppt es und fordert den Benutzer zur Eingabe auf.

Mehr Infos von set /?:

Mit der Option / P können Sie den Wert einer Variablen auf eine Zeile von setzen   vom Benutzer eingegebene Eingabe. Zeigt den angegebenen promptString vor an   Lesen Sie die Eingabezeile. Der promptString kann leer sein.

Ƭᴇcʜιᴇ007
quelle
0

Sie können verwenden set / p

Ein Beispiel aus http://ss64.com/nt/set.html

@echo off
Set /P _dept=Please enter Department || Set _dept=NothingChosen
If "%_dept%"=="NothingChosen" goto :sub_error
If /i "%_dept%"=="finance" goto sub_finance
If /i "%_dept%"=="hr" goto sub_hr
goto:eof

Verwenden Sie den obigen Link, um weitere Optionen und Beispiele anzuzeigen. Sie können auch Set /? innerhalb der Eingabeaufforderung, um die Optionen anzuzeigen.

Denken Sie daran, dass interaktive Batch-Dateien sehr schnell chaotisch werden. Je nachdem, wie komplex Ihr Skript ist und wer die Zielgruppe ist, sollten Sie andere Möglichkeiten zur Programmierung ausprobieren. Wenn Sie mit VB vertraut sind, VBScript könnte einfacher zu programmieren sein und CScript kann verwendet werden, um es auf der Kommandozeile auszuführen.

amit_g
quelle