我正在尝试编写一个主要用于复制目的地的批处理文件。现在,我想把它带到其他人可以使用的地方,而无需进入并编辑目录和目的地。有没有办法让我将批处理文件写入它提示的位置,询问用户想要复制的目录,并询问用户想要将其复制到的驱动器?
这就是我现在已经使用了一段时间。
@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来改善这一点吗?
答案 0 :(得分:1)
您可以使用:
SET /P variable=[promptString]
来自文档:
/ P开关允许您将变量的值设置为用户输入的输入行。在读取输入行之前显示指定的promptString。 promptString可以为空。
你可以像使用它一样:
set /p backupdir=Enter Destination Directory:
和
set /p sourcedir=Enter Source Directory:
然后将复制命令更改为:
%backupcmd% "%sourcedir%\*.*" "%backupdir%\Data"
并且不要忘记你的attrib
命令(应该已经使用%backupdir%
):
attrib -s -h "%backupdir%\Data"
作为替代方案,请考虑允许可选的命令行参数:
dobackup Destination BackupDir
实施了这些变化:
if "%1" == "" (
set /p backupdir=Enter Destination Directory:
) else (
set backupdir=%~1
)
if "%2" == "" (
set /p sourcedir=Enter Source Directory:
) else (
set sourcedir=%~2
)
最后,在SETLOCAL
之后添加@echo off
行会使您的命名变量远离全局环境空间。