Board logo

标题: [已完成]30元求解答:%~1传递参数时遇到文件路径错误 [打印本页]

作者: sykIII    时间: 2019-10-16 19:33     标题: [已完成]30元求解答:%~1传递参数时遇到文件路径错误

本帖最后由 sykIII 于 2019-10-16 22:01 编辑
  1. @echo off
  2. :loop
  3. if "%~1"=="" goto :done
  4. if not exist "%~1\*.ico" goto :err
  5. del "%~1\desktop.ini" /f /q /ah 1>nul 2>nul
  6. set "dir=%~1"
  7. pushd "%dir%"
  8. for /f "delims=" %%a in ('dir /a-d/b *.ico') do set "icon=%%~nxa"
  9. (echo [.ShellClassInfo]
  10. echo IconResource=%icon%
  11. )>"%dir%\desktop.ini"
  12. attrib +s +h "%dir%\desktop.ini"
  13. attrib +s +h "%icon%"
  14. attrib +r /d "%dir%"
  15. popd
  16. goto :next
  17. :err
  18. set /p ="err﹥" <nul
  19. set /p ="%~nx1" <nul
  20. echo,
  21. :next
  22. shift
  23. goto :loop
  24. :done
  25. pause>nul
复制代码
我在使用过程中遇到一些情况让我很感兴趣
有的文件夹名称有特殊符号:比如"1&2"
这种在%~1里传递时会丢失"&"之后的路径,然后导致失败
但是我平时这种情况很少见,后来发现只要前面有空格:" 1&2"或"12 1&2"
就能显示出&号以及后面的路径了

因为比较感兴趣我测试了一下直接echo文件夹" 1&2"的路径
效果是这样
  1. 测试>echo C:\Users\sword\Desktop\测试\ 1  & 2
  2. 测试\ 1
  3. '2' 不是内部或外部命令,也不是可运行的程序
  4. 或批处理文件。
复制代码
求解答一下
以及如何修改才能让这套代码战无不胜
作者: zaqmlp    时间: 2019-10-16 19:52

本帖最后由 zaqmlp 于 2019-10-17 00:18 编辑
  1. @echo off
  2. set info=互助互利,支付宝扫码头像,感谢打赏
  3. rem 有问题,可加QQ956535081及时沟通
  4. title %info%
  5. setlocal enabledelayedexpansion
  6. >"%tmp%\t.t" echo;!cmdcmdline!
  7. endlocal
  8. >"%tmp%\j.j" echo;s=WSH.StdIn.ReadLine().replace(/^^.+?\.(bat^|cmd)"\s*/ig,'');
  9. >>"%tmp%\j.j" echo;WSH.echo(s.replace(/"/g,'').replace(/ (?=[a-z]:)/ig,'\r\n'));
  10. for /f "delims=" %%a in ('type "%tmp%\t.t"^|cscript -nologo -e:jscript "%tmp%\j.j"') do (
  11.     if exist "%%a\" (
  12.         echo;"%%a"
  13.         del /f /q /ah "%%a\desktop.ini" 2>nul
  14.         set "f="
  15.         for /f "delims=" %%b in ('dir /a-d/b "%%a\*.ico" 2^>nul') do (
  16.             set f=1
  17.             (echo;[.ShellClassInfo]
  18.             echo;IconResource=%%b)>"%%a\desktop.ini"
  19.             attrib +s +h "%%a\%%b"
  20.             attrib +s +h "%%a\desktop.ini"
  21.             attrib +r "%%a"
  22.         )
  23.         if not defined f (
  24.             echo;Not Found - *.ico
  25.         )
  26.         echo;--------------------------
  27.     )
  28. )
  29. :end
  30. echo;%info%
  31. pause
  32. exit
复制代码

作者: sykIII    时间: 2019-10-16 21:29

本帖最后由 sykIII 于 2019-10-16 21:31 编辑

回复 2# zaqmlp


希望只显示错误的被处理文件夹的名称
以及希望能去掉引号




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2