Como posso permitir que um usuário escolha os diretórios a serem copiados?

0

Estou tentando gravar um arquivo de lote que é basicamente usado para copiar destinos. Agora, quero chegar aonde outras pessoas possam usá-lo sem precisar entrar e editar os diretórios e destinos. Existe uma maneira de eu escrever o arquivo em lote para onde ele solicita, perguntando pelo diretório que o usuário gostaria de copiar, e pedir a unidade que o usuário gostaria de copiá-lo?

Isso é o que venho usando há algum tempo.

@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

E há alguma maneira de melhorar isso usando o xcopy?

    
por JustinD 05.12.2012 / 18:44

2 respostas

1

Existem algumas opções:

1) Use argumentos de linha de comando.

O usuário executaria como backup.bat c:\SourcePath d:\DestinationPath

Em seguida, use% 1 e% 2 (etc.) no arquivo em lotes para usar os argumentos fornecidos.

Algo como

set backupdir=%2

e

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

Mais informações: Como passar parâmetros de linha de comando no lote Arquivo

2) Use a função Prompt ( /P ) de Set para solicitar ao usuário informações para preencher a variável com:

Exemplo: SET /P variable=[promptString]

Então você poderia fazer algo como:

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

Quando chegar a essas linhas no lote, ele parará e solicitará a entrada do usuário.

Mais informações de set /? :

The /P switch allows you to set the value of a variable to a line of input entered by the user. Displays the specified promptString before reading the line of input. The promptString can be empty.

    
por 05.12.2012 / 19:16
0

Você pode usar definir / p

Um exemplo do link

@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

Use o link acima para ver mais opções e exemplos. você também pode fazer Set /? no prompt de comando para ver as opções.

Lembre-se de que os arquivos em lote interativos ficam muito confusos e você pode querer examinar outras formas de programação, dependendo de quão complexo é seu script e de quem é o público-alvo. Se você estiver familiarizado com o VB, o VBScript pode ser mais simples de programar e CScript pode ser usado para executá-lo na linha de comando.

    
por 05.12.2012 / 19:15