Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 保存未知(用户)数量的文件/目录的批处理脚本_Batch File_Windows 7_Backup - Fatal编程技术网

Batch file 保存未知(用户)数量的文件/目录的批处理脚本

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=

我正在尝试执行一个批处理脚本,该脚本将备份用户给定路径的文件/目录。问题是,我需要让用户决定要输入多少路径(可以超过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=%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
循环来处理文本文件;使用完后,只需覆盖循环内的变量即可。