【问题标题】:Batch script that save unknown(user) number of files/directory保存未知(用户)数量的文件/目录的批处理脚本
【发布时间】:2016-03-14 02:31:37
【问题描述】:

我正在尝试执行一个批处理脚本来备份文件/目录,路径由用户指定。问题是我需要让用户决定他要输入多少条路径(可以超过 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="etc...这样的变量,因为我不知道我需要的路径数。我想我需要一个循环:

FOR %%c IN(numuser) DO
SET /P path1=enter the path
xcopy "%path1%" "%cd%"

但是在这里我又遇到了路径变量名的问题。随着循环的进行,我需要增加并创建新变量。我不知道该怎么做。

【问题讨论】:

  • 有趣的是您想如何在 MS-DOS 上执行此操作,请检查您的标签:Don't use this tag for questions regarding the Windows command line. ... 有没有想过使用 robocopy 完成此任务?如果我没记错的话,它可以使用包含多个目录的文本文件。
  • 我刚查了robocopy。但我认为问题仍然存在;当我启动脚本时,它必须询问用户要保存多少条路径;它不能是从用户选择开始就已经知道的多个路径吗?
  • 虽然这涉及到批处理文件以外的其他技术:使用 windows 脚本主机或 powershell 创建某种类型的 gui,它会询问用户文件夹。将它们写入文件并运行 robocopy。
  • 您可以让用户一次性提供所有路径作为命令行参数并在for 循环中使用%* 来处理它们,或者您可以让用户将所有路径文本文件中的路径并使用for /f 循环来处理文本文件。
  • 而且您根本不需要为单独的路径使用单独的变量;使用完后,只需覆盖循环内的变量即可。

标签: batch-file windows-7 backup


【解决方案1】:

允许“将所有不同路径存储在不同变量中”的概念的技术术语是array。下面的批处理文件显示了如何使用数组来解决这个问题。请注意,用户在按下回车键之前给出多个路径比预先计算所需路径的数量更容易:

@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]!"
)

有关批处理文件中阵列管理的进一步说明,请参阅this post

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-23
    相关资源
    最近更新 更多