Я пытаюсь написать командный файл, который в основном используется для копирования мест назначения. Теперь я хочу сделать так, чтобы другие люди могли использовать его без необходимости заходить и редактировать каталоги и места назначения. Есть ли способ для меня записать пакетный файл туда, где он запрашивает, запрашивая каталог, который пользователь хотел бы скопировать, и запросить диск, на который пользователь хотел бы скопировать его?

Это то, что я использовал некоторое время сейчас.

@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

И есть ли способ, которым я могу улучшить это с помощью xcopy?

2 ответа2

1

Есть несколько вариантов:

1) Используйте аргументы командной строки.

Пользователь будет запускать его как backup.bat c:\SourcePath d:\DestinationPath

Затем используйте% 1 и% 2 (и т.д.) В командном файле, чтобы использовать предоставленные аргументы.

Что-то вроде

set backupdir=%2

а также

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

Подробнее: Как передать параметры командной строки в командный файл

2) Используйте функцию подсказки (/P) Set чтобы запросить у пользователя информацию для заполнения переменной:

Пример: SET /P variable=[promptString]

Так что вы можете сделать что-то вроде:

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

Когда он доберется до этих строк в пакете, он остановится и предложит пользователю ввести данные.

Больше информации из set /?:

Переключатель /P позволяет вам установить значение переменной в строку ввода, введенную пользователем. Отображает указанную строку promptString перед чтением строки ввода. PromptString может быть пустым.

0

Вы можете использовать набор / р

Пример с 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

Используйте ссылку выше, чтобы увидеть больше вариантов и примеров. Вы также можете сделать Set /? в командной строке, чтобы увидеть параметры.

Имейте в виду, что интерактивные командные файлы очень быстро запутываются, и вам может понадобиться поискать другие способы программирования, в зависимости от сложности вашего сценария и целевой аудитории. Если вы знакомы с VB, VBScript может быть проще для программирования, и CScript может быть использован для запуска его в командной строке.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .