找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 24490|回复: 14

[文件操作] 批处理命令start打开文件路径会读取不完整问题

[复制链接]
发表于 2023-12-14 22:55:18 | 显示全部楼层 |阅读模式
本帖最后由 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
发表于 2023-12-14 23:09:29 | 显示全部楼层
上传文件请使用网盘分享
发表于 2023-12-15 02:12:27 | 显示全部楼层
试试
加英文双引号
不要直接call
不要enabledelayedexpansion
放进for自变量里
发表于 2023-12-15 10:05:18 | 显示全部楼层
可能没有加英文双引号
发表于 2023-12-15 11:29:53 | 显示全部楼层

有关start用法须特别注意的几点可参考》http://www.bathome.net/thread-65763-1-1.html
发表于 2023-12-15 13:10:41 | 显示全部楼层
回复 1# DAMEDAMEU
  1. start "" "start %~1"
复制代码
如果需要上传文件,请用使用网盘。

如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
 楼主| 发表于 2023-12-15 16:54:08 | 显示全部楼层
回复 5# aloha20200628


    嗯
解决了有空格路径的问题
但是含有!字符的路径还是不行
 楼主| 发表于 2023-12-15 17:05:59 | 显示全部楼层
回复 6# Batcher


    已上传
链接:https://pan.baidu.com/s/1S7I7nPiiaa3DFAd-q7s_-w?pwd=rk2f
提取码:rk2f
发表于 2023-12-15 17:23:02 | 显示全部楼层
回复 7# DAMEDAMEU


    含有!字符的路径执行到哪一个脚本的第几行会出错?
发表于 2023-12-15 18:18:23 | 显示全部楼层
回复 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. )
复制代码


标签不要写在括号里
发表于 2023-12-15 19:17:12 | 显示全部楼层
本帖最后由 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
 楼主| 发表于 2023-12-15 20:11:49 | 显示全部楼层
回复 10# 77七


    这里应该没什么问题吧
    主要是路径里如果包含!的话 就会自动消去
 楼主| 发表于 2023-12-15 20:15:01 | 显示全部楼层
回复 9# Batcher


    应该是搜索到的文件路径里如果包含!
    路径就会被自动取!
导致与真实的路径不符
所以会报找不到路径的错
 楼主| 发表于 2023-12-15 20:18:47 | 显示全部楼层
回复 11# aloha20200628


    感谢大佬的代码
确实是延迟变量导致的!
发表于 2023-12-17 14:58:49 | 显示全部楼层
回复 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"
)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 06:35 , Processed in 0.021291 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表