我正在尝试编写一个批处理文件,主要用于复制目标。现在,我想让其他人可以使用它,而不必进入并编辑目录和目标。有没有办法让我将批处理文件写入提示的位置,询问用户要复制的目录,并询问用户要将其复制到的驱动器?
这就是我目前一直在使用的东西。
@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)使用提示函数(/P
)Set
提示用户输入信息来填充变量:
例子: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可以用来在命令行上运行它。