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

[文本处理] [已解决]批处理for语句in里面的命令中特殊符号如何处理

下面代码用到一个find小插件,地址:http://baiy.cn/utils/f/index.htm

for /f "delims=" %%i in ('f %need_css_link% -ric:"***:[^\(\'\"]*\.(png^|jpg^|gif)" -o:"k"') do (

    xcopy /y %%i %new_folder_path%
)

错误信息:
此时不应有 " -o:"k"') do (。

D:\PHPnow-1.5.3\htdocs\bat>for /f "delims=" %i in ('f D:\PHPnow-1.5.3\htdocs\mycenter\cssparts\menu\menu_17\menu_17.css
-ric:"***:[^\(\'\"]*\.(png^|jpg^|gif)" -o:"k"') do (

[ 本帖最后由 linjuming 于 2009-11-19 10:00 编辑 ]
1

评分人数

    • batman: 感谢主动给标题标注[已解决]字样PB + 2

问题出在这里
for /f "delims=" %%i in ('f %need_css_link% -ric:"***:[^\(\'\"]*\.(png^|jpg^|gif)" -o:"k"') do (
    xcopy /y %%i %new_folder_path%
)

如果有\"就出错,去掉就正常
单单运行f %need_css_link% -ric:"***:[^\(\'\"]*\.(png^|jpg^|gif)" -o:"k"也正常
怎么办?

TOP

for /f "delims=" %%i in ('f %need_css_link% -ric:"***:[^\(\'\"]*\.^(png^|jpg^|gif^)^" -o:"k"') do
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

还是出错
D:\PHPnow-1.5.3\htdocs\bat>for /F "delims=" %i in ('f D:\PHPnow-1.5.3\htdocs\mycenter\cssparts\menu\menu_32\menu_32.css
-ric:"***:[^\(\'\"]*\.(png|jpg|gif)" -o:"k"') do (xcopy /y F:\ScrapBook\data\20091116161106\%i D:\PHPnow-1.5.3\htdocs\my
center\cssparts\menu\menu_32\ )
'jpg' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

TOP

习惯性把它当作命令了。

for /f "delims=" %%i in ('f %need_css_link% -ric:"***:[^\(\'\"]*\.^(png^^^|jpg^^^|gif^)^" -o:"k"') do
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

原帖由 zqz0012005 于 2009-11-17 22:35 发表
习惯性把它当作命令了。

for /f "delims=" %%i in ('f %need_css_link% -ric:"***:[^\(\'\"]*\.^(png^^^|jpg^^^|gif^)^" -o:"k"') do


成功了,但为什么要加^^^三个这么多?
-ric:"这里双引号前为什么不加^ ?

[ 本帖最后由 linjuming 于 2009-11-18 12:00 编辑 ]

TOP

你没看到我用灰色标记的地方吗?这些都是成对的引号。

其实也可以加,但引号里面的特殊字符需要处理。
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

[^\(\'\"]  这是正则里面  非【】中字符的写法,里面的   \"   是匹配字符串不能含有双引号的意思,所以它不是跟前面的双引号配对。
还有能否解释一下根据什么情况加多少个^?  看你的代码中连续加了三个^ ,不太懂。

TOP

回复 8楼 的帖子

我知道这个意思,但电脑不知道,CMD程序从左到右将依次处理,引号当然也是就近匹配(除非被转义)。


for /f "delims=" %%i in ('f %need_css_link% -ric:^"***:[^^\^(\'\"]*\.(png^|jpg^|gif)" -o:"k"') do

for /f "delims=" %%i in ('f %need_css_link% -ric:^^^"***:[^^^^\^(\'\"]*\.(png|jpg|gif)" -o:"k"') do


涉及到for /f 运行机制预处理相关知识。
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

另外,标题宜改为
for语句in里面的命令中特殊符号如何处理
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

此题具体是for /f 语句in里面的命令的运行机制
in里面的命令是在一个新的CMD中运行的。

CMD解释bat时要预处理一次,for /f 运行的CMD对其中的命令也要预处理一次,共两次预处理,所以要加那么多转义。
知道原理后,还可以改成其他写法。

for /f 运行机制及预处理更多细节请搜索以前的老帖。
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

相当复杂,需要深入再深入,不过现在已懂了一大半了,先用着这个,到迫不得已的时候再还头认真学习一下预处理的知识。
谢谢版主的热情帮助!

TOP

返回列表