【发布时间】: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