[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
回复 30# CrLf
我也很好奇楼主怎么绕过这个限制的
我所能想到的方式是
把文件放到名称带空格的目录中
然后再往批处理上拖动
依靠固有的空格给文件完整路径加上引号对
天的白色影子

TOP

我的系统是NT6, "文档"的实际路径没有任何空格, 图片没作修改的, 如下:
C:\Users\Administrator\Documents\A&=^,;%()@~$'{}B\

引号是后面echo时添加的.

大家能根据28楼的两行代码想到什么没?

TOP

本帖最后由 watermark 于 2012-2-14 19:27 编辑

忙呀, 差点忘记了!

贴一份能证明标题的代码:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set tsr=!*
  4. if defined tsr (
  5. for /f "tokens=*" %%i in ("!tsr!") do  (
  6.     for  %%a in (%%i) do (
  7. cd /d "%~dp0"
  8. set filea=%%~a
  9. set exta=%%~xa
  10. set name=%%~na
  11. set patha=%%~dpa
  12. set folder=!name!_!exta:~1!
  13. set pathb=!patha!!folder!
  14. call :action
  15. pause>nul
  16. )
  17. )
  18. )
  19. :action
  20. echo "%filea%"
  21. echo "%exta%"
  22. echo "%folder%"
  23. md "%folder%"
  24. echo "%cd%"
  25. cd "%pathb%"
  26. echo on
  27. echo "%cd%"
  28. @echo off
  29. goto eof
  30. :eof
复制代码
这份代码不能直接绕过(abc)&(xyz)形式的限制, 但拖入别的文件能枚举同目录下任何含特殊字符的文件.

TOP

我想看可以绕过(abc)&(xyz)形式的代码

TOP

回复 33# watermark


    晕倒...
    这效果的实现并不源于 !*,而是 * 在 for 中作为通配符匹配文件,所以生效的实际上是这句:
  1. for  %%a in (%%i) do ...
复制代码
因此直接写成
  1. for  %%a in (*) do md %%~ni
复制代码
的运行结果也是一样的,仅受所拖动文件的目录影响,不受文件影响。

    变量解释和参数扩展是两码事,! 虽然和 % 一样能用来解释变量,但是并不被承认用于扩展参数,这个概念区别要分清。

TOP

回复 34# powerbat


    理论上应该还有一大把,比如 if=.cmd  for;.bat  &&&.txt,各种非法语法,各种恶心文件名

TOP

回复 33# watermark
老实说
我也为楼主的这种避实击虚的思路雷到了
很想收回在23楼所做的预测
代码就不再分析了
天的白色影子

TOP

本帖最后由 garyng 于 2012-2-22 21:40 编辑

还记得 这编帖子么?
[未彻底解决]多个文件拖到cmd窗口后,如何获取每一文件的完整路径
qzwqzw大大(在我楼上呢~)在第7楼写着:

用批处理的办法基本无解

这个问题源于Explorer的拖放扩展程序shell32.dll
注册表路径位于HKEY_CLASSES_ROOT\CLSID\{86C86720-42A0-1069-A2E8-08002B30309D}
因为它没有将“&"视为转义符号
所以不会用引号对将其扩起取消转义

所以对于这个问题无非以下几个方案:
1、修改拖放扩展程序shell32.dll,让它可以处理"&"的情况;
2、新建拖放扩展程序,专门处理cmd之类程序的路径过滤;
3、在处理前告知用户使用"&"的情况可能出错,交由用户处理发生的异常;


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



在图片看到了“&” 字符

因为它没有将“&"视为转义符号
所以不会用引号对将其扩起取消转义



难道 楼主 写了个第3方? 还是 修改了 shell32.dll?!

TOP

返回列表