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

[文件操作] 其实CMD原生支持操作含有多种形式特殊字符的文件和目录!

[复制链接]
发表于 2012-1-22 23:58:35 | 显示全部楼层 |阅读模式
CMD原生就支持解析多种特殊字符,只要是合法的文件(夹)名称,批处理都能正确处理,无需修改系统文件和注册表,不必投机取巧和钻漏洞。

如下图,把含有任意 =,;&^~@#$%()' 字符的文件拖放至批处理的图标上, 生成一个新的文件夹,绝无任何PS:

代码迟一些再公布。

祝大家新年快乐!
发表于 2012-1-23 00:20:18 | 显示全部楼层
虽然不知道楼主在说什么,但是感觉地球人都知道的样子。
 楼主| 发表于 2012-1-23 00:42:25 | 显示全部楼层
本帖最后由 watermark 于 2012-1-23 17:33 编辑

回复 2# find
http://www.bathome.net/viewthread.php?tid=7509
你写一个看看。
感觉你都没看清楚。
发表于 2012-1-23 01:16:05 | 显示全部楼层
楼主有兴趣可以测试一下xp系统下的
 楼主| 发表于 2012-1-23 02:00:41 | 显示全部楼层
回复 4# applba

特意进入 XP SP3 的 PE 里测试了一下,结论一样!
Win98 和 Win3.1 我就不测了,其实能否解析特殊字符跟系统版本无关。
发表于 2012-1-23 12:26:29 | 显示全部楼层
回复 3# watermark


那个帖子是要求多个文件拖到cmd窗口后获取每一文件的完整路径,跟你这个有何关联?
发表于 2012-1-23 12:33:18 | 显示全部楼层
晕啊,感觉很厉害的样子,楼主公布代码吧。
发表于 2012-1-23 15:03:41 | 显示全部楼层
不知道LZ什么意思
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /p pth=
  4. md "!pth!"
  5. pause
复制代码
发表于 2012-1-23 15:29:54 | 显示全部楼层
回复 8# defanive


    你不是在bat吧发布魔塔的那个?
发表于 2012-1-23 15:51:59 | 显示全部楼层
回复 9# cyxgg
是的,在这里发了,然后转发去贴吧的
发表于 2012-1-23 17:24:54 | 显示全部楼层
回复 8# defanive
是拖至批处理的图标上执行.
 楼主| 发表于 2012-1-23 17:40:30 | 显示全部楼层
回复 8# defanive

不知道你是什么意思, 看看你8楼的代码执行结果吧:

今天是春节, 不是愚人节.
 楼主| 发表于 2012-1-23 18:51:22 | 显示全部楼层
本帖最后由 watermark 于 2012-1-23 19:44 编辑

回复 8# defanive

Win2008 不能拖入文件至批处理窗口, 而且你的是在同级目录内生成同名文件夹!
我的批处理是没有"/p"的, 也不存在这些问题.
发表于 2012-1-23 20:43:42 | 显示全部楼层
本帖最后由 CrLf 于 2012-1-24 19:08 编辑

试写两种思路…
  1. @echo off&setlocal enabledelayedexpansion
  2. set str=!cmdcmdline:*^" =!
  3. set str= !str:^"=!
  4. for %%a in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do set "str=!str: %%a:=" "%%a:!"
  5. for /f "delims=" %%a in (^"!str:~2!"") do endlocal&echo %%a
  6. pause
复制代码
  1. @echo off&setlocal enabledelayedexpansion
  2. set str=!cmdcmdline:*" =!
  3. for %%a in (^^ ^& ^, ^; ^( ^) ) do set "str=!str:%%a=^%%a!"
  4. if !str:~-1!==^" set "str=!str:~,-1!"
  5. (endlocal
  6. for /f "delims=" %%a in ("%str:""="%") do echo %%a)
  7. pause
复制代码
修改两个不严谨的地方。
方案一对付拖动文件到图标时应该是比较通用的,但是难以应付传递参数的情况。因等号无法直接替换,故在方案二中未对其进行转义处理,其实思路和旧帖中qzw的方案类似,如他当时所言,逐字转义确实是比较稳妥可靠的办法,所得的结果也比较通用。
 楼主| 发表于 2012-1-23 21:09:53 | 显示全部楼层
本帖最后由 watermark 于 2012-1-23 21:28 编辑

回复 14# CrLf

大哥, 你这没有任何结果的, 自己没测试过.

我还是建议大家贴图就好了, 测试通过的才贴代码.

我是说原生支持, 但并非那么普通.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 07:11 , Processed in 0.015466 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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