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

Batch file 用于循环和从目录读取文件夹名称,batch-file,for-loop,Batch File,For Loop,我有一个包含各种文件夹的目录,我想根据用户在批处理文件中的输入对其进行归档。文件夹[Project Backup]中有各种项目[PJT001、PJT002、PJT003],这些项目可能会不时变化。 我做的第一件事是根据用户的输入设置一个变量,并在7zip命令中使用该变量在特定位置存档。这对于请求一次备份一个项目来说很好,但是如果用户希望一次备份多个项目呢。为此,我尝试创建一个For循环,用于当用户被询问[PJT001 PJT003 PJT005]时输入多个项目,但我没有运气。请看下面我尝试了什么

我有一个包含各种文件夹的目录,我想根据用户在批处理文件中的输入对其进行归档。文件夹[Project Backup]中有各种项目[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
)
关于我失败的地方有什么建议吗?我只能存档此场景中的第一个项目

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


非常感谢

FOR有多种口味,您需要确保使用的是正确的

在您的情况下,我相信您希望使用简单FOR(而不是FOR/F):

如果要将
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"
)

嗨,Dbenham,我尝试了两个或两个示例,但仍然出现错误。当循环通过一条线时,我正在努力使for循环工作。我有一个解决方案,可以循环一个文本文件的多行,但如果可能的话,我希望所有内容都包含在一个批处理文件中。
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"
)