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

[文件操作] 【已解决】批处理如何解决%*参数中带有英文逗号等特殊字符无法正确解析的问题?

[复制链接]
发表于 2015-12-19 21:52:55 | 显示全部楼层 |阅读模式
本帖最后由 nullptr 于 2015-12-21 11:48 编辑

目的:选中若干个文件拖到test.bat上,显示文件个数,然后文件路径排序后传给另一个程序,即变量names存储 "文件名1" "文件名2" 等等

问题1:当文件名含有逗号时,如"a,b,c.txt",由于传参时没有自动加上引号,导致被当成3个文件,请问如何处理,需要考虑文件名含空格自动加引号的情况,见补充
问题2:参数排序有没有什么简便办法
先谢谢了

补充:把"a,b,c.txt" "sp ace.txt" "comma,sp ace.txt" 拖到test.bat上传递的参数%*为
  1. a,b,c.txt "sp ace.txt" "comma,sp ace.txt"
复制代码
test.bat
  1. @echo off
  2. setlocal ENABLEDELAYEDEXPANSION
  3. for %%I in (%*) do (
  4.     set /a count+=1
  5.     set names=!names!"%%~nxI"
  6. )
  7. echo,%count%
  8. echo,%names%
  9. rem program %names%
  10. pause
复制代码

评分

参与人数 1PB -2 收起 理由
pcl_test -2 勿发笼统、无意义的标题

查看全部评分

发表于 2015-12-20 01:59:43 | 显示全部楼层
本帖最后由 /zhqsystem/zhq 于 2015-12-21 01:29 编辑

回复 1# nullptr
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in ('echo,%*') do (
  3. set "name_i=%%~i"
  4. set "name_i=!name_i:"=!"
  5. set "name_i=!name_i: %~d1=";"%~d1!"
  6. for %%j in ("!name_i!") do (
  7.   for /f "delims=" %%k in ("%%~fj") do (
  8.    rem:此处具体取值
  9.    echo,%%k
  10.   )
  11. )
  12. )
  13. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
nullptr + 1 感谢!

查看全部评分

 楼主| 发表于 2015-12-20 09:39:52 | 显示全部楼层
回复  nullptr
/zhqsystem/zhq 发表于 2015-12-20 01:59

谢谢,不过需要考虑文件名含空格会自动加引号的情况,见主楼补充部分
发表于 2015-12-21 01:29:57 | 显示全部楼层
回复 3# nullptr
2楼已更新

评分

参与人数 1技术 +1 收起 理由
nullptr + 1 非常感谢!

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 05:47 , Processed in 0.020228 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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