【问题标题】:New to batch and having issues with multiple variables and for loops批处理新手,存在多个变量和 for 循环的问题
【发布时间】:2014-07-30 18:40:37
【问题描述】:

通过在每个用户的 appdata 文件夹中搜索可执行文件,然后在找到时采取一系列操作,尝试找出哪些用户拥有 google chrome。在我们的系统上,一些用户文件夹位于永久磁盘 D: 上。我对这两个实例都使用了 for 循环,但我确信有更好的方法。

如果我从计算机上运行它,它似乎可以工作,但是当作为启动运行时,似乎什么也没有发生。想知道是否有人可以指出问题或效率低下,我知道那里。

@ECHO OFF

SETLOCAL ENABLEDELAYEDEXPANSION

FOR /D %%H IN ("D:\Users\*") DO (
    IF EXIST "%%H\appdata\local\google\chrome\application\chrome.exe" (
    DEL /Q "%%H\Desktop\Google Chrome.lnk"
    msiexec /i "[MSI PATH]" /quiet
    ECHO %DATE% %COMPUTERNAME% %%H Replaced >> "ChromeInstalls.txt"
    )
)   

FOR /D %%G IN ("C:\Users\*") DO (
    IF EXIST "%%G\appdata\local\google\chrome\application\chrome.exe" (
    DEL /Q "%%G\Desktop\Google Chrome.lnk"
    msiexec /i "[MSI PATH]" /quiet
    ECHO %DATE% %COMPUTERNAME% %%G Replaced >> "ChromeInstalls.txt"
    )
)

EXIT /b

感谢任何帮助。

【问题讨论】:

  • 您的代码似乎没有问题。在 IF EXIST 行之后放置一行 echo %%H&pause 并执行您的代码 - 检查是否检测到现有位置。如果它仅在启动脚本中失败,则权限可能是问题。
  • 它找到了我要找的东西。有人告诉我这不是权限问题,但我会再次检查,因为每次我手动运行它时它都可以正常工作。
  • 想通了。此脚本在实际启动脚本中的调用路径有小错字。感谢您向我保证我的理智。

标签: variables batch-file for-loop


【解决方案1】:

问题是您正在解析 for body 的无效路径。尝试使用 /r 开关锁定包含 chome 文件的父驱动器以处理指定驱动器内的所有子目录,这样您就不必在 set () 中使用完整路径,例如 ..

@echo 关闭

  For /r d: %%a in (*) do (

  If "%%~nxa"=="Chrome.exe" (

      DEL /Q "%%G\Desktop\Google Chrome.lnk"
      msiexec /i "[MSI PATH]" /quiet
      ECHO %DATE% %COMPUTERNAME% %%G Replaced >> "ChromeInstalls.txt"

       )

  )




  For /r c: %%a in (*) do (

  If "%%~nxa"=="Chrome.exe" (

      DEL /Q "%%G\Desktop\Google Chrome.lnk"
      msiexec /i "[MSI PATH]" /quiet
      ECHO %DATE% %COMPUTERNAME% %%G Replaced >> "ChromeInstalls.txt"

        )

   )

试试看。希望这会有所帮助。

【讨论】:

  • 好的。这是有道理的,我使用了错误的参数。你能分解一下 %%~nxa 的作用吗?所以我可以理解并在未来使用它,而不仅仅是复制。
  • 所以我一直在玩这个。到目前为止,我没有任何运气,甚至比以前更少。除了 FOR 和 IF 行之外,我将所有内容都注释掉了,在第二个“DO”之后,我把 ECHO 找到了,只是想看看它是否检测到我知道的 .exe,但我什么也没得到。也许我在你的解释中遗漏了一些东西,如上所述,我对此很陌生。
  • 如果你的意思是代码不能正常工作,这是由于条件if "%%~nxa"=="Chrome.exe"后面的do语句所致;条件语句中不需要它。
  • %%~nxa 会将局部变量扩展为其名称和扩展名,仅取消文件路径。阅读有关扩展的更多信息以获取更多详细信息
  • 我做了一些改变,去掉了 L 开关后的路径.. 这应该还没有测试..
猜你喜欢
  • 2022-01-22
  • 2016-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多