Batch file 保存未知(用户)数量的文件/目录的批处理脚本
我正在尝试执行一个批处理脚本,该脚本将备份用户给定路径的文件/目录。问题是,我需要让用户决定要输入多少路径(可以超过10个),然后在新目录中复制所有文件/目录。到目前为止,我只使用一条路径作为参数:Batch file 保存未知(用户)数量的文件/目录的批处理脚本,batch-file,windows-7,backup,Batch File,Windows 7,Backup,我正在尝试执行一个批处理脚本,该脚本将备份用户给定路径的文件/目录。问题是,我需要让用户决定要输入多少路径(可以超过10个),然后在新目录中复制所有文件/目录。到目前为止,我只使用一条路径作为参数: SET /P numuser=How many paths? SET /P pathh=Enter the path SET "foldname=sav-%DATE%-%TIME:~0,8% SET "foldname=%foldname::=-% echo foldname=
SET /P numuser=How many paths?
SET /P pathh=Enter the path
SET "foldname=sav-%DATE%-%TIME:~0,8%
SET "foldname=%foldname::=-%
echo foldname=%foldname%
mkdir "%foldname%"
cd "%foldname%"
xcopy "%pathh%" "%cd%"
pause
考虑到路径的使用取决于路径的数量,我不太确定如何将所有不同的路径存储在不同的变量中。所以我不能初始化像“SET path1=”“SET path2=”等这样的变量。。。因为我不知道我需要的路径数。我想我需要一个循环:
FOR %%c IN(numuser) DO
SET /P path1=enter the path
xcopy "%path1%" "%cd%"
但在这里我又遇到了路径变量名的问题。随着循环的进行,我需要增加并创建新的变量。我不知道如何做到这一点。允许“在不同变量中存储所有不同路径”的概念的技术术语是。下面的批处理文件显示了如何使用数组来解决此问题。请注意,与预先计算所需路径的数量相比,用户只需按enter键即可提供多个路径:
@echo off
setlocal EnableDelayedExpansion
rem Get the paths from user and store them in "path" array
set num=0
:nextPath
set "input="
set /P "input=Enter next path: "
if not defined input goto endPaths
set /A num+=1
set "path[%num%]=%input%"
goto nextPath
:endPaths
rem Process the stored paths
for /L %%i in (1,1,%num%) do (
echo Processing: "!path[%%i]!"
)
有关批处理文件中阵列管理的详细说明,请参阅。如果您想在MS-DOS上执行此操作,请检查您的标记:
不要使用此标记来回答有关Windows命令行的问题。
。。。有没有想过使用robocopy
执行此任务?如果我没记错的话,它可以使用一个包含许多目录的文本文件;当我启动脚本时,它必须询问用户要保存多少路径;虽然这涉及到批处理文件以外的其他技术,但它不能是一个从用户选择开始就已知的路径数:使用windows脚本主机或powershell创建某种gui,要求用户提供文件夹。将它们写入文件并运行robocopy。您可以让用户一次提供所有路径作为命令行参数,并在for
循环中使用%*
来处理所有路径,或者,您可以让用户将所有路径放在一个文本文件中,并使用for/f
循环来处理文本文件;使用完后,只需覆盖循环内的变量即可。