[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
本帖最后由 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的方案类似,如他当时所言,逐字转义确实是比较稳妥可靠的办法,所得的结果也比较通用。

TOP

测试过才发的,既然实现 echo 了,改一下不就是 md 了吗?不过楼主貌似有不一样的思路,很感兴趣,期待…

TOP

回复 26# watermark


    贴 100 张图不如贴出代码...

TOP

本帖最后由 CrLf 于 2012-1-30 20:28 编辑

汗,还是不懂...
话说参数为“(abc)&(xyz).txt”时,应该会出现语法错误,连 cmd 都打不开的啊,为什么楼主能正常运行...
好奇,静待答案揭晓。

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

返回列表