1

截至目前,我使用批处理执行操作,如下所示。FOR /D %%G in ("*") DO 命令

  • 这将在所有文件夹上执行命令,因为我已经提到了“*”,现在我需要在上述命令中跳过文件夹(名称为 *Shared)。

请告知我是否可以使用 IF 循环来执行相同的操作以及我该怎么做。或建议是否有任何简单的方法来执行

4

2 回答 2

1

您可以检查%%G变量以查看文件夹名称。从那里,您可以获取最后 6 个字符并查看值是否为Shared.

我们使用SETLOCAL ENABLEDELAYEDEXPANSION以便我们可以更新循环内的变量。

@ECHO OFF

SETLOCAL ENABLEDELAYEDEXPANSION 

FOR /D %%G in ("*") DO ( 
   SET str=%%G

   IF /I "!str:~-6!" NEQ "Shared" (
       Command
   )
)

PAUSE
于 2012-07-10T19:52:17.590 回答
1

另一种选择是使用 FINDSTR 过滤 DIR 命令的输出并使用 FOR /F 处理结果。

for /f "eol=: delims=" %%G in ('dir /b /ad ^|findstr /lie "shared"') do command

这是一个更强大的 LittleBobbyTables 解决方案版本,适用!于文件夹名称。它还正确地进行了不区分大小写的比较。

setlocal disableDelayedExpansion
for /d %%G in (*) DO ( 
  set "str=%%G"
  setlocal enableDelayedExpansion
  if /i "!str:~-6!" neq "shared" command
  endlocal
)
于 2012-07-10T20:15:16.300 回答