Board logo

标题: [文件操作] 批处理命令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
  1. start "" "start %~1"
复制代码
如果需要上传文件,请用使用网盘。

如果需要上传截图,可以找个图床,例如:
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


  1. @echo off
  2. set /p string=file name:
  3. set /p end=extension name:
  4. set /p pathToSearch=searching path:
  5. set count=0
  6. (for /r "%pathToSearch%" %%i in ("*%string%*.%end%") do (
  7. set /a count+=1
  8. echo %%i
  9. ))>findResults.txt
  10. echo.
  11. echo ----------------------------------------------
  12. echo.
  13. echo have found %count% results
  14. endlocal
  15. echo.
复制代码

  1. if errorlevel 3 (
  2. :try
  3. echo error with errorlevel %errorlevel%
  4. choice /t 5 /d N /m "DO YOU WANT TO RETRY"
  5. if %errorlevel%==1 goto run
  6. if %errorlevel%==2 exit /b
  7. if errorlevel 3 goto try
  8. )
复制代码


标签不要写在括号里
作者: aloha20200628    时间: 2023-12-15 19:17

本帖最后由 aloha20200628 于 2023-12-15 19:31 编辑


楼主提供的三个批处理脚本只有AutoFileSearcher.bat采用了延迟变量,所以路径文件名中的!字符就会作祟。
可以改写源脚本不用延迟变量,而且其中的 for /r 方法可用更便捷的dir /b/s/a-d方法替代,改写版代码如下》
说明:第6行是防空处理,以便输入时可中途无错退出。第9行是删除路径双引号,以防用拖入目录方式输入时,一旦路径含有空格,系统会自动用双引号包裹。
  1. @echo off
  2. set "string=" &set "end=" &set "pathToSearch="
  3. set /p "string=file name: "
  4. set /p "end=extension name: "
  5. set /p "pathToSearch=searching path: "
  6. if defined string if defined end if defined pathToSearch goto[main]
  7. exit/b
  8. :[main]
  9. set "pathToSearch=%pathToSearch:"=%"
  10. dir /b/s/a-d "%pathToSearch%\*%string%*.%end%" 2>nul>"findResults.txt"
  11. for /f %%i in ('find /v /c "" ^<"findResults.txt" ') do (set "n=%%i")
  12. if %n% neq 0 (type "findResults.txt")
  13. echo,found %n% files
  14. 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://bbs.bathome.net/) Powered by Discuz! 7.2