标题: [文件操作] 批处理命令Start为何提示找不到文件? [打印本页]
作者: 441857769@qq.co 时间: 2013-7-25 12:26 标题: 批处理命令Start为何提示找不到文件?
- @echo off
- set ADB_CMD="%cd%\tools\adb.exe"
- start /b %ADB_CMD% logcat -v threadtime >./logcat_main.log
- pause
复制代码
在这个批处理下有个tools文件夹下有个adb.exe
现在我想在当前CMD下启动另一个窗口,去玩成另一件事。抓取手机的log "adb logcat -v threadtime" 把log输入到当前文件夹下的logcat_main.log文件中。
但是运行命令 提示“window 找不到文件‘logcat‘. 请确件夹是否正确,再试一次........”
我单独在命令行下 运行该文件夹下的adb logcat -v threadtime >./logcat_main.log 是没问题的。但不知道为什么用start 启动另一个窗口却没用。
作者: yu2n 时间: 2013-7-25 16:19
试试start命令的 /D 参数。- @echo off
- set "ADB_CMD_DIR=%cd%\tools"
- set "ADB_CMD=adb.exe"
- start /b /D"%ADB_CMD_DIR%" "%ADB_CMD%" logcat -v threadtime >./logcat_main.log
- pause
复制代码
作者: 441857769@qq.co 时间: 2013-7-25 17:34
回复 2# yu2n
还是不行,还是会提示“找不到logcat”
作者: xxpinqz 时间: 2013-7-25 17:50
start /b "" %ADB_CMD% logcat -v threadtime >logcat_main.log
看看
作者: yu2n 时间: 2013-7-25 18:22
回复 3# 441857769@qq.co
你确定是CMD的start命令的问题?有没有对 ADB_CMD 路径进行测试呢。
常用的测试命令:
对目录(如D:\abc)测试是否存在:- if exist d:\abc (echo 存在) else (echo 不存在)
- pushd d:\abc 2>nul&& (echo 存在) || (echo 不存在) & popd
复制代码
对文件(如D:\abc.txt)测试是否存在:- if exist d:\abc.txt (echo 存在) else (echo 不存在)
复制代码
从出错信息看,你的ADB_CMD没有成功设置为你的预期值。
作者: apang 时间: 2013-7-25 18:43
应该是 start 把 %ADB_CMD% 当作"title",把logcat当作程序名了。如此,4#应该就可以
另,start /b 不会启动另外一个cmd窗口吧?
作者: yu2n 时间: 2013-7-25 18:59
本帖最后由 yu2n 于 2013-7-25 19:07 编辑
应该是 start 把 %ADB_CMD% 当作"title",把logcat当作程序名了。如此,4#应该就可以
另,start /b 不会启 ...
apang 发表于 2013-7-25 18:43
- @echo off
-
- set "ADB_CMD=%~dp0tools\adb.exe"
-
- setlocal enabledelayedexpansion
- for /f "tokens=1 delims=??" %%a in ('echo,?%ADB_CMD%?') do (
- set wkDir=%%~dpa
- set wkDir=!wkDir:~0,-1!
- set wkApp=%%~nxa
- )
- setlocal disabledelayedexpansion
-
- @echo on
- start "" /D "%wkDir%" "%wkApp%" logcat -v threadtime >./logcat_main.log
- @echo off
复制代码
作者: 441857769@qq.co 时间: 2013-7-25 20:29
本帖最后由 441857769@qq.co 于 2013-7-25 20:54 编辑
回复 7# yu2n
首先在这里谢谢大神了。 刚验证了下。这个不会弹出找不到logcat了,并且可以运行。但又有一个新的问题 就是弹出框显示当前log信息后 不会将log输出去logcat_maint.log中去。 只是在CMD 中显示。logcat_main.log文件一直是0kb.
我后面又加了一个参数-d 意思是输完log后关闭当前窗口 start "" /D "%wkDir%" "%wkApp%" logcat -d -v threadtime >./logcat_main.log 但还是不能把当前log输出到logcat_main.log中去。
还有一个问题:我看你改了后有几个地方看不懂了 !
1.为什么要用 for 循环 把路径整一下。
for /f "tokens=1 delims=??" %%a in ('echo,?%ADB_CMD%?') do (
set wkDir=%%~dpa
set wkDir=!wkDir:~0,-1!
set wkApp=%%~nxa
)
这个for 循环中 delims=?? 两个问号是什么意思? 按两个问题截取字符 还有后面的 echo,?%ADB_CMD%?也没怎么看懂
2.什么我用 echo 查看 wkDir 的值 在 set wkDir=%%~dpa set wkDir=!wkDir:~0,-1! 之前都 是空的 在 set wkApp=%%~nxa后就显示当前工作路径了?
还有 其中的 %%~dpa 和 %%~nxa也有点不明白,是把a 扩展到一个驱动器号和路径 这里的扩屏是什么意思?
3.最的一点。 哈哈。看了你的 我还是没明白我之前的是那里错了?
作者: yu2n 时间: 2013-7-27 00:27
1. 个人习惯对路径进行处理一下,把路径的文件夹路径、文件名拿出来。两个问号是保证提取到完整路径(降低路径中包含的一些特殊字符的影响)。
2. 输入以下命令,相信你看得懂它的解释。- setlocal enabledelayedexpansion /?
- for /?
复制代码
3. 6楼已经说了。apang:应该是 start 把 %ADB_CMD% 当作"title",把logcat当作程序名了。
作者: yu2n 时间: 2013-7-27 01:07
回复 8# 441857769@qq.co
日志的输出还是需要cmd环境。
1. 生成临时BAT- @echo off
-
- :: 程序文件
- set "adb_app=%~dp0tools\adb.exe"
-
- :: 临时 BAT 文件
- set "tmp_bat=%tmp%\logcat_main.log.bat"
-
- :: 日志文件
- set "app_log=%~dp0logcat_main.log"
-
-
-
- :: 生成临时 BAT 文件("%tmp_bat%")
- echo,"%adb_app%" logcat -v threadtime ^>"%app_log%" > "%tmp_bat%"
-
- :: 运行临时 BAT 文件
- start "" /wait "%tmp_bat%"
-
- :: 删除临时 BAT 文件
- if exist "%tmp_bat%" del /q "%tmp_bat%"
-
- :: 打开日志
- if exist "%app_log%" notepad "%app_log%"
-
- pause
复制代码
2. start 调用 cmd /c- @echo on
- set "ADB_CMD=%~dp0tools\adb.exe"
- set "logFile=%~dp0logcat_main.log"
- rem start "" /wait "cmd" /c %ADB_CMD% /k logcat -v threadtime ^>"%logFile%"
- start "" /wait "cmd" /c "%ADB_CMD%" /k logcat -v threadtime ^>"%logFile%"
- if exist "%logFile%" notepad "%logFile%"
- pause
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |