【问题标题】:.bat file runs other .bat file unexpectedly [duplicate].bat 文件意外运行其他 .bat 文件[重复]
【发布时间】:2019-03-20 14:41:35
【问题描述】:

我创建了以下 TcpConn.bat 脚本,它以两秒的间隔从 Android 设备获取有关打开的 tcp 连接的信息,在 adb shell 中运行。

:startTCP
adb shell cat /proc/net/tcp
timeout /t 2
goto startTCP

在我的 /dev/test/ 文件夹中测试此脚本时,脚本按预期运行,并给了我预期的输出 sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode

但是,当我将它移动到我的 /dev/batchFiles/ 文件夹时,它开始运行该文件夹中不同 .bat 脚本的内容(称为 adb.bat)。与内容

cd C:\Android\sdk\platform-tools
adb logcat -s Unity PackageManager dalvikvm DEBUG

现在在我的 TcpConn.bat 脚本中,我执行“adb shell...”,它与“adb.bat”的名称匹配,没有扩展名,所以它似乎调用了这个.

我的问题是,为什么它会执行该脚本?我不希望它执行脚本,而是运行 adb 命令 我不是:

  • 提供完整的文件路径/文件名(应为 c:/dev/batchFiles/adb.bat),我也不将其用作“adb”之类的字符串
  • 我没有使用call 解释here
  • 不使用start

批处理脚本是否总是检查目录中是否存在与命令的一部分匹配的文件并运行该文件,即使它没有附加扩展名?如果是这样,有没有办法禁用这种行为?


我知道我可以重命名“adb.bat”文件并完成它。但想知道它为什么会运行。 我唯一能与此相关的是“How to run batch script without using *.bat extension

【问题讨论】:

  • cmd 按以下顺序搜索可执行文件:1) 当前工作文件夹 2) 路径。
  • 如果您不希望当前批处理文件在当前工作目录中搜索任何可执行文件(.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS; .JSE;.WSF;.WSH;.MSC)你可以设置一个特殊的变量来做到这一点。 set NoDefaultCurrentDirectoryInExePath=1。但最佳做法是指定文件名的扩展名和/或使用您尝试执行的程序的完整路径。
  • 它将运行它找到的第一个名为 adb 的具有可执行扩展名的文件。如果它首先找到 .bat 文件,则运行该文件。为防止这种情况,请将文件名指定为 adb.exe
  • 哦,我明白了。我想要的adb 在“C:/Android/sdk/platform-tools/adb.exe”中,但是因为它首先在当前目录中找到一个名为“adb”的文件,所以执行而不是去我想要的 adb.exe。那是对的吗?感谢您提供信息!

标签: windows batch-file command-line adb


【解决方案1】:

只要在与您正在执行的目录相同的目录中有一个批处理文件,它就会执行该 adb.bat 文件,因为当您告诉 Windows 命令提示符时,它会首先在当前目录中查找可执行文件你的批处理文件来执行一个命令。

就您的问题的解决方案而言,我会说如果可能的话,请将您的 adb.bat 文件的名称更改为 adbFile.bat 之类的其他名称,这样您就不会在每次需要调用时都调用它来自该特定目录的 adb 工具。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-13
    • 1970-01-01
    • 2018-09-07
    • 2015-11-06
    • 2012-03-08
    • 2013-11-26
    • 1970-01-01
    相关资源
    最近更新 更多