用于循环和从目录中读取文件夹名称

时间:2014-05-29 19:03:08

标签: batch-file for-loop

我有一个包含各种文件夹的目录,我想根据批处理文件中的用户输入进行存档。文件夹[Project Backups]有各种项目[PJT001,PJT002,PJT003],这些项目可能会不时变化。 我做的第一件事是根据用户的输入设置变量,并在7zip的命令中使用该变量来存档在特定位置。这对于请求一次备份一个项目很好,但是如果用户想要一次备份多个项目该怎么办。为此,我尝试创建一个for循环,如果用户在被问到[PJT001 PJT003 PJT005]时输入了多个项目,但我没有运气。请看下面我尝试的内容。

set /p project= Which projects to backup? !User may enter [PJT001 PJT003 PJT005]
for /f "tokens=* delims= " %%G in ("%project%") do (
    %appliction% a -t7z -mx9 -mmt "%destination%\%%G" %source%\%%G
)

关于我失败的地方的任何建议?我只能归档这个场景中的第一个项目。

我想要帮助的第二件事是我希望用户能够输入“ALL”并且存档目录中的所有项目。为此,批处理文件可以读取目录中的所有文件夹名称并存储在变量中,这样我就可以将其分解为标记并像以前一样创建for循环(但是可行哈!)以便所有项目都将被存档?我们也欢迎任何更好的解决方案!

非常感谢!

1 个答案:

答案 0 :(得分:0)

有很多种FOR,你需要确保使用正确的。

在你的情况下,我相信你想使用简单的FOR(不是FOR / F):

set /p project= Which projects to backup?
for %%G in (%project%) do %appliction% a -t7z -mx9 -mmt "%destination%\%%G" "%source%\%%G"

如果想将ALL解释为所有项目(文件夹),那么FOR / D将迭代文件夹:

set /p project= Which projects to backup?
if /i "%project%" equ "ALL" (
  for /d %%G in ("%source%\*") do %appliction% a -t7z -mx9 -mmt "%destination%\%%~nxG" "%%G"
else (
  for %%G in (%project%) do %appliction% a -t7z -mx9 -mmt "%destination%\%%G" "%source%\%%G"
)