[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]批处理遇到带特殊符号的路径时遇到困难了

问题求教:
  我使用promo ramdisk 创立了ramdisk内存盘转移了users文件,使用中新程序会在appdate文件夹中创立程序配置文件,固有转移配置文件夹并创立目录链接的需求。
自己捣鼓了个发送到的批处理,由于采用了for循环语句,在处理带有特殊符号如(),等符号时,批处理无法运行。代码已在管理员的帮助下更正,万分感谢!
更正:
1、1%--》~1%以去掉多余双引号
2、等式用双引号引来,如"patht=O:\Users\文档\AppData\%DirName%\%name%"
批处理如下所示:
  1. @echo off&setlocal enabledelayedexpansion
  2. set patha=%~1
  3. for /f %%a in ("%patha%") do (
  4. set "pathb=%%~dpa")
  5. for %%a in ("%pathb:~,-1%") do set DirName=%%~nxa
  6. if "%DirName%"=="" set DirName=0\%patha:~,1%
  7. for %%a in ("%patha%") do set name=%%~nxa
  8. set "patht=O:\Users\文档\AppData\%DirName%\%name%"
  9. set "patht1=O:\Users\文档\AppData\%DirName%\"
  10. md "O:\Users\文档\AppData\%DirName%"
  11. if not exist "O:\Users\文档\AppData\%DirName%" md "O:\Users\文档\AppData\%DirName%"
  12. for %%z In ("%patha%") do if "%%~az" geq "d" (echo d|xcopy /s/e/h/y "%patha%\*" "%patht%\"
  13. rd /s /q  "%patha%"
  14. mklink /j "%patha%" "%patht%") else If "%%~az" geq "-" (echo f|xcopy "%patha%" "%patht1%"  /h /y
  15. del /a /f /s "%patha%"
  16. mklink "%patha%" "%patht%")
复制代码

回复 1# yiyu585


请举例说明一下空格会导致哪行代码出错?

请参考Q-01观察一下在哪一步出错的:
https://mp.weixin.qq.com/s/6lbb97qUOs1sTyKJfN0ZEQ
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

引号括起来吧,一般这样就可以了

TOP

回复 2# Batcher


我这个批处理是希望通过for语句获取程序的配置文件(夹)名,以及目标文件(夹)上级目录名,在O盘appdate文件夹里以上级目录名创建文件夹,然后再复制目标文件(夹)到该文件夹,之后删除原始文件,根据是文件还是文件夹创建目录链接和软链接。
现在遇到空格等特殊符号后会直接退出,退出位置就是在for语句处理地址获取上级文件夹名及目标文件(夹)名的地方。

TOP

回复 3# wujunkai


    现在都是扩起来的,还是不行。出错位置是for语句提取上级目录名,目标文件(夹)名的地方

TOP

回复 4# yiyu585


请先测试一下这样是否可以成功提取上级目录名:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "patha=%~1"
  4. for /f %%a in ("%patha%") do (
  5.     set "pathb=%%~dpa"
  6. )
  7. if "%pathb%" equ "%patha:~,2%\" (
  8.     set "DirName=0"
  9. ) else (
  10.     for %%a in ("%pathb:~,-1%") do (
  11.         set "DirName=%%~nxa"
  12.     )
  13. )
  14. echo,%DirName%
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 6# Batcher


   谢谢,测试没有通过。在论坛翻了下,找到个改名的,凑合也实现了需要的功能,代码贴上帖子了。

TOP

回复 7# yiyu585


    能解决问题就好。纯属好奇问一下,6楼的代码,你用的什么测试数据得到了什么结果?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 yiyu585 于 2020-10-5 13:15 编辑

回复 8# Batcher


    就是右键发送到闪一下就没了,非根目录,路径无空格也是不行,还怀疑是编码问题,结果转成ANSI一样不行。不过在我自己的bat中修改%1为%~1后,已经能处理上级目录带有空格的文件夹了(上级目录名带空格的与目标文件(夹)处于根目录等同处理,DirName设置为0),感谢!现在将获取的name在拼接时额外加上双引号,成功解决了空格引发的问题,但还是无法处理带(),等特殊符号的路径,当然这种情况很少。

TOP

回复 9# yiyu585


    把你最新的代码更新到顶楼,然后再次使用2楼的方法查看一下带括号的文件名是哪行代码在报错。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 10# Batcher


    代码已贴,遇到带有特殊符号的上级目录,报错代码为:
  1. for %Z In ("%patha%") Do if "%~aZ" GEq "d" (echo d|xcopy /s/e/h/y "%patha%\*" "%patht%\"
  2. rd /s /q  "%patha%"
  3. mklink /j "%patha%" "%patht%") else If "%~aZ" GEq "-" (echo f|xcopy "%patha%" "%patht1%"  /h /y
  4. del /a /f /s "%patha%"
  5. mklink "%patha%" "%patht%")
复制代码

TOP

回复 11# yiyu585


用2楼方法执行这个代码试试能否解决语法报错的问题:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "DirName=(123)"
  4. set "patha=D:\Test\123).txt"
  5. for %%a in ("%patha%") do (
  6.     set "name=%%~nxa"
  7. )
  8. set "patht=O:\Users\文档\AppData\%DirName%\%name%"
  9. set "patht1=O:\Users\文档\AppData\%DirName%\"
  10. for %%z in ("%patha%") do (
  11.     echo %%~az
  12.     if "%%~az" geq "d" (
  13.         echo xcopy /s /e /h /y "%patha%\*" "%patht%\"
  14.     ) else if "%%~az" geq "-" (
  15.         echo xcopy /h /y "%patha%" "%patht1%"
  16.     )
  17. )
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 12# Batcher


    感谢!问题已解决。双引号将整个等式全引起来就没问题了。

TOP

返回列表