.bat脚本搜索所有驱动器以查找现有子文件夹

时间:2015-05-05 20:21:06

标签: windows batch-file scripting

目前我有这个:

for %%d in (c d e f g h i j k l m n o p q r s t u v w x y z) do (
   if exist "%%d\Program Files (x86)\Folder": (
        cd "%%d\Program Files (x86)\Folder\subfolder\file"
         )
)

但它似乎并没有起作用。我希望批处理脚本搜索驱动器是否存在某个程序的子文件夹,然后cd到.ini文件的位置(如果有)。该文件也可能位于/ program files /以外的位置,即它可能位于driveletter:\ Folder。

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:2)

您的代码存在一些问题:

  • 冒号属于驱动器号。
  • 如果您的CD命令正在更改活动驱动器,则必须使用/ D选项。
  • 如果“文件夹”变成文件名而不是文件夹名称
  • ,您的逻辑将失败
  • 您从不打算验证子文件夹是否存在
  • 您无法将CD刻录到文件中,因为您的伪代码意味着

以下更改应该有效:

a

但是有一种更好的方法 - 您可以在不验证文件夹存在的情况下尝试CD,并将任何错误消息重定向到null。

for %%d in (c d e f g h i j k l m n o p q r s t u v w x y z) do (
  if exist "%%d:\Program Files (x86)\Folder\subfolder\" (
    cd /d "%%d:\Program Files (x86)\Folder\subfolder"
  )
)

如果你想检测CD是否最终成功,那么你可以使用for %%d in (c d e f g h i j k l m n o p q r s t u v w x y z) do ( cd /d "%%d:\Program Files (x86)\Folder\subfolder" 2>nul ) 有条件地摆脱循环,这样ERRORLEVEL在成功时将为0,或者在失败时为1。

&&

除了检测到succuess / error之外,如果子文件夹存在于两个不同的驱动器上,则与最后一个选项存在另一个差异。前两个选项最终CD到最后找到的子文件夹。最后一个选项将CD发送到第一个找到的子文件夹。

答案 1 :(得分:0)

if exist "%programfiles(x86)%\Folder\subfolder\file" (

    echo it's alive!

)
这是有效的吗?为什么要遍历所有这些字母?

答案 2 :(得分:0)

在Windows中,您应该使用环境变量来访问程序文件文件夹,这样您就不必检查现有的驱动器。

查看http://ss64.com/nt/syntax-variables.html或在命令提示符下输入set

在您的情况下,您应该使用%ProgramFiles(x86)%