标题: [文件操作] 批处理命令start打开文件路径会读取不完整问题 [打印本页]
作者: DAMEDAMEU 时间: 2023-12-14 22:55 标题: 批处理命令start打开文件路径会读取不完整问题
本帖最后由 DAMEDAMEU 于 2023-12-15 20:19 编辑
用一点点的C和bat实现了一个可以搜索指定路径下的文件的应用
有一个Opener.bat用来接收传入的搜索到的路径,并打开该文件
相关语句是 start %~1
但是在打开C:\Program File (x86)…………时会报错说找不到文件(已解决 更改为 start "" "%~1" 即可)
****或者路径中含有!等符号时,路径会读取不完整(已解决 取消延迟变量)
应该怎么修改
求大佬指点
源文件网盘地址:
链接:https://pan.baidu.com/s/1S7I7nPiiaa3DFAd-q7s_-w?pwd=rk2f
提取码:rk2f
作者: 77七 时间: 2023-12-14 23:09
上传文件请使用网盘分享
作者: Five66 时间: 2023-12-15 02:12
试试
加英文双引号
不要直接call
不要enabledelayedexpansion
放进for自变量里
作者: yyz219 时间: 2023-12-15 10:05
可能没有加英文双引号
作者: aloha20200628 时间: 2023-12-15 11:29
有关start用法须特别注意的几点可参考》http://www.bathome.net/thread-65763-1-1.html
作者: Batcher 时间: 2023-12-15 13:10
回复 1# DAMEDAMEU 复制代码
如果需要上传文件,请用使用网盘。
如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
作者: DAMEDAMEU 时间: 2023-12-15 16:54
回复 5# aloha20200628
嗯
解决了有空格路径的问题
但是含有!字符的路径还是不行
作者: DAMEDAMEU 时间: 2023-12-15 17:05
回复 6# Batcher
已上传
链接:https://pan.baidu.com/s/1S7I7nPiiaa3DFAd-q7s_-w?pwd=rk2f
提取码:rk2f
作者: Batcher 时间: 2023-12-15 17:23
回复 7# DAMEDAMEU
含有!字符的路径执行到哪一个脚本的第几行会出错?
作者: 77七 时间: 2023-12-15 18:18
回复 8# DAMEDAMEU
- @echo off
-
- set /p string=file name:
- set /p end=extension name:
- set /p pathToSearch=searching path:
- set count=0
-
- (for /r "%pathToSearch%" %%i in ("*%string%*.%end%") do (
- set /a count+=1
- echo %%i
- ))>findResults.txt
- echo.
-
- echo ----------------------------------------------
-
- echo.
- echo have found %count% results
- endlocal
- echo.
复制代码
- if errorlevel 3 (
- :try
- echo error with errorlevel %errorlevel%
- choice /t 5 /d N /m "DO YOU WANT TO RETRY"
- if %errorlevel%==1 goto run
- if %errorlevel%==2 exit /b
- if errorlevel 3 goto try
- )
复制代码
标签不要写在括号里
作者: aloha20200628 时间: 2023-12-15 19:17
本帖最后由 aloha20200628 于 2023-12-15 19:31 编辑
楼主提供的三个批处理脚本只有AutoFileSearcher.bat采用了延迟变量,所以路径文件名中的!字符就会作祟。
可以改写源脚本不用延迟变量,而且其中的 for /r 方法可用更便捷的dir /b/s/a-d方法替代,改写版代码如下》
说明:第6行是防空处理,以便输入时可中途无错退出。第9行是删除路径双引号,以防用拖入目录方式输入时,一旦路径含有空格,系统会自动用双引号包裹。- @echo off
- set "string=" &set "end=" &set "pathToSearch="
- set /p "string=file name: "
- set /p "end=extension name: "
- set /p "pathToSearch=searching path: "
- if defined string if defined end if defined pathToSearch goto[main]
- exit/b
- :[main]
- set "pathToSearch=%pathToSearch:"=%"
- dir /b/s/a-d "%pathToSearch%\*%string%*.%end%" 2>nul>"findResults.txt"
- for /f %%i in ('find /v /c "" ^<"findResults.txt" ') do (set "n=%%i")
- if %n% neq 0 (type "findResults.txt")
- echo,found %n% files
- pause &exit/b
复制代码
回复 7# DAMEDAMEU
作者: DAMEDAMEU 时间: 2023-12-15 20:11
回复 10# 77七
这里应该没什么问题吧
主要是路径里如果包含!的话 就会自动消去
作者: DAMEDAMEU 时间: 2023-12-15 20:15
回复 9# Batcher
应该是搜索到的文件路径里如果包含!
路径就会被自动取!
导致与真实的路径不符
所以会报找不到路径的错
作者: DAMEDAMEU 时间: 2023-12-15 20:18
回复 11# aloha20200628
感谢大佬的代码
确实是延迟变量导致的!
作者: /zhqsystem/zhq 时间: 2023-12-17 14:58
回复 14# DAMEDAMEU
变量值改用%~s1试试,前几个字符为正常字符情况下不会出错[但是这个二次提取时获取不到完整路径源名],如果还出错,就新建一个进行二次传递,或是临时关闭延迟后运行完在开启[推荐这种+短路径模式]
示例:1
for /f "delims=" %%i in ("%~f1")do (
关闭延迟
传递 "%%~si" "%%~fi"
开启延迟
)
示例:2
>"%temp%\tmp.txt" echo,%%~f1
for /f "delims=" %%i in ('type "%temp%\tmp.txt"')do (
传递 "%%~fi"
)
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |