我如何允许用户选择要复制的目录?

我如何允许用户选择要复制的目录?

我正在尝试编写一个批处理文件,主要用于复制目标。现在,我想让其他人可以使用它,而不必进入并编辑目录和目标。有没有办法让我将批处理文件写入提示的位置,询问用户要复制的目录,并询问用户要将其复制到的驱动器?

这就是我目前一直在使用的东西。

@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 来改善这种情况吗?

答案1

有几个选择:

1)使用命令行参数。

用户将像这样运行它backup.bat c:\SourcePath d:\DestinationPath

然后在批处理文件中使用 %1 和 %2(等等)来使用提供的参数。

就像是

set backupdir=%2

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

更多信息:如何在批处理文件中传递命令行参数

2)使用提示函数(/PSet提示用户输入信息来填充变量:

例子:SET /P variable=[promptString]

因此你可以做类似的事情:

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

当它到达批次中的那些行时,它将停止并提示用户输入。

更多信息来自set /?

/P 开关允许您将变量的值设置为用户输入的一行。在读取输入行之前显示指定的 promptString。promptString 可以为空。

答案2

您可以使用设置/p

一个例子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,VB脚本编程可能更简单,CScript可以用来在命令行上运行它。

相关内容