Windows .bat脚本,用于在所有驱动器中搜索现有子文件夹
目前我有:Windows .bat脚本,用于在所有驱动器中搜索现有子文件夹,windows,batch-file,scripting,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文件的
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:\文件夹中
非常感谢您的帮助
if exist "%programfiles(x86)%\Folder\subfolder\file" (
echo it's alive!
)
这样行吗?为什么要遍历所有这些字母?在Windows中,您应该使用环境变量访问program files文件夹,这样就不必检查现有驱动器 查看或在命令提示下输入
set
在您的情况下,您应该使用
%ProgramFiles(x86)%
您的代码有一些问题:
- 冒号位于驱动器号之后
- 如果CD命令正在更改活动驱动器,则必须使用/D选项
- 如果“文件夹”原来是文件名而不是文件夹名,则逻辑将失败
- 您永远不会费心验证子文件夹是否存在
- 您不能像伪代码所暗示的那样将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 (
if exist "%%d:\Program Files (x86)\Folder\subfolder\" (
cd /d "%%d:\Program Files (x86)\Folder\subfolder"
)
)
但是有一个更好的方法-您可以在不验证文件夹存在的情况下尝试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 (
cd /d "%%d:\Program Files (x86)\Folder\subfolder" 2>nul
)
如果您想检测CD是否最终成功,那么您可以使用&&
有条件地中断循环,这样ERRORLEVEL在成功时为0,在失败时为1
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 && goto :break
)
:break
if %errorlevel% equ 0 (
echo SUCCESS
) else (
echo FAILURE
)
除了检测成功/错误之外,如果子文件夹存在于两个不同的驱动器上,则最后一个选项还有另一个区别。前两个选项最终会CD到最后找到的子文件夹。最后一个选项向第一个找到的子文件夹发送一张CD。您有
程序文件(x86)
和程序文件
变量,您不需要遍历所有字母…我将其放在注释中,因为您特别要求.bat
文件,但是我鼓励你去考虑。文件可能不在其中之一,这是一个例子。出于安全原因,Powershell不允许在这些机器上使用:(如果是,我将使用它。我需要搜索每个驱动器,可能不知道它将运行的计算机上存在哪些驱动器。根据返回的响应,我需要将CD刻录到正确驱动器上的文件夹。该文件夹将不存在于任何其他驱动器上,因为它是一个安装位置--我需要确定程序安装在哪个驱动器上总计为。@VioletSmith-%SYSTEMDRIVE%将指向程序文件所在的驱动器。在这种情况下,文件所在的目录可能不是程序文件文件夹。例如,它也可能位于F:\folder\files中。如果文件存在于(drivelette)中,这是否可行\文件夹?因此它将是%Folder\subfolder\File这非常有用,谢谢!快速问题:如果文件夹不在program files\Folder中,而是在%%d:\Folder上,那么再次放入此循环是否有意义,或者我是否可以对两个可能的位置进行条件检查?您可以自己尝试,看看会发生什么;-)您应该尝试各种测试条件(有意创建各种测试场景)在你下结论之前。我会在一个循环中放置两个CD/D命令。你可以使用任意一种形式,带或不带条件GOTO:BREAK。我想出了一些可行的方法,然后在用户找不到正确的安装位置时提示用户。现在我需要弄清楚如何正确解决提示。。。