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

[文本处理] 如何取消批处理百分号%的转义符功能?

[复制链接]
发表于 2013-4-25 15:07:27 | 显示全部楼层 |阅读模式
例如我需要在某文件中替换 某些符合条件的功能
  1. ::::::::::::::::::::::::: Test File Start
  2. include def.mk
  3. #include mayasrc.mk
  4. #MAYA_FILES += $(TESTTRACK_FILES)
  5. MAYA_DIR_MODEL                := $(RAW_SRC_DIR_)/model
  6. EXE                                 = "%MayaPath%/bin/mayabatch.exe"
  7. $(PRO) -command "serverExport $("D:/BikeGame_fullpath/ArtResource/",$<) $(patsubst $(BUILD_SRC_DIR_)%,"$(BUILD_SRC_DIR)%",$@)"
  8. ::::::::::::::::::::::::: Test File End

  9. for /f "tokens=*" %%a in ('type "!file!"') do (
  10.   echo "%%a"|FindStr /C:"EXE"
  11. )
复制代码
此时%%a 会转换为某些行,例如:$(PRO) -command "serverExport $("D:/BikeGame_fullpath/ArtResource/",$<) $(patsubst $(BUILD_SRC_DIR_)%,\"$(BUILD_SRC_DIR)%\",$@)"
但是这句包含百分号,会继续转换. 所以导致输出不正确的数据.或直接显示“没有找到指定文件”

请问各位有否解决办法?(不用vbs ect)
发表于 2013-4-25 15:26:04 | 显示全部楼层
可以这样:
  1. for /f "tokens=*" %%a in ('type "!file!"') do (
  2.    setlocal disabledelayedexpansion
  3.    set "str=%%a"
  4.    cmd /v /c echo "!str!"|FindStr /C:"EXE"
  5.    endlocal
  6. )
复制代码
或者
  1. (cmd /c for /f "tokens=*" %%a in ('type "!file!"') do echo "%%a")|FindStr /C:"EXE"
复制代码
再或者
  1. @echo off
  2. %*
  3. call %0 goto type|FindStr /C:"EXE"
  4. pause&exit/b

  5. :type
  6. setlocal enabledelayedexpansion
  7. for /f "tokens=*" %%a in ('type "!file!"') do (
  8.   echo "%%a"
  9. )
复制代码
但最主要的是,楼主的代码和这句有明显的功能区别吗?
  1. Find "EXE"<"!file!"
复制代码
 楼主| 发表于 2013-4-25 15:52:29 | 显示全部楼层
回复 2# CrLf

    谢谢!原来 cmd 还有 /v /c 等开关~
    Find命令也可以,但是我想使用正则表达式,过滤掉不是EXE开头的。但是直接使用FindStr /C:"^EXE" 貌似使用不了?再请教下CrLf对正则表达可有研究?

    再表感谢!
发表于 2013-4-25 15:58:54 | 显示全部楼层
本帖最后由 CrLf 于 2013-4-25 16:05 编辑

回复 3# godzza


    ^EXE 匹配的是 EXE 位于行首的行内容
    findstr 的正则表达是阉割版的,连指定重复次数和向后引用都没有...所以学会完整正则就懂 findstr 了:
http://bbs.bathome.net/thread-14682-1-1.html
http://www.oschina.net/question/12_9507
http://baike.baidu.com/view/94238.htm
 楼主| 发表于 2013-4-25 16:06:11 | 显示全部楼层
本帖最后由 godzza 于 2013-4-25 16:09 编辑

回复 4# CrLf


    看过一点,

  1. for /f "tokens=*" %%a in ('type "!file!"') do (
  2.   setlocal disabledelayedexpansion
  3.   set "str=%%a"
  4.   cmd /v /c echo "!str!"|FindStr /R /C:"^EXE"
  5.   endlocal
  6. )  
复制代码
我的脚本是这样, 但是貌似没有得到预期的结果...(原文中第6行没找到
发表于 2013-4-25 16:14:13 | 显示全部楼层
回复 5# godzza


    那你得把原文发上来
 楼主| 发表于 2013-4-25 16:30:24 | 显示全部楼层
本帖最后由 godzza 于 2013-4-25 16:31 编辑

回复 6# CrLf

  1. include def.mk
  2. #include mayasrc.mk

  3. EXE = "F:/Program Files (x86)/Autodesk/Maya2012/bin/mayabatch.exe"

  4. SRCS_DIR                        = $(MAYA_DIR_MODEL)/
  5. OBJS_DIR                        = $(BUILD_SRC_DIR_)/model/maya/
  6. REF_SRCS_DIR                        = $(MAYA_REF_SCENE)/
  7. REF_OBJS_DIR                        = $(BUILD_SRC_DIR_)/reference/
  8. ANIM_SRCS_DIR                        = $(MAYA_DIR_ANIM)/
  9. ANIM_OBJS_DIR                        = $(BUILD_SRC_DIR_)/anim/maya/

  10. XML_OBJS        = $(patsubst $(ANIM_SRCS_DIR)%.mb, $(ANIM_OBJS_DIR)%.xml, $(MAYA_FILES_ANIM)) $(patsubst $(SRCS_DIR)%.mb, $(OBJS_DIR)%.xml, $(MAYA_FILES)) $(patsubst $(REF_SRCS_DIR)%.mb, $(REF_OBJS_DIR)%.xml, $(MAYA_FILES_REF))

  11. include mayadepend.mk

  12. $(OBJS_DIR)%.xml: $(SRCS_DIR)%.mb maya.trigger
  13.         @mkdir -p $(dir $(@))
  14.         @echo convert $<
  15.         $(EXE) -command "serverExport $(patsubst $(RAW_SRC_DIR_)%,"$(RAW_SRC_DIR)%",$<) $(patsubst $(BUILD_SRC_DIR_)%,"$(BUILD_SRC_DIR)%",$@)"

  16. $(REF_OBJS_DIR)%.xml: $(REF_SRCS_DIR)%.mb maya.trigger
  17.         @mkdir -p $(dir $(@))
  18.         @echo convert $<
  19.         $(EXE) -command "serverExport $(patsubst $(RAW_SRC_DIR_)%,"$(RAW_SRC_DIR)%",$<) $(patsubst $(BUILD_SRC_DIR_)%,"$(BUILD_SRC_DIR)%",$@)"


  20. $(ANIM_OBJS_DIR)%.xml: $(ANIM_SRCS_DIR)%.mb maya.trigger
  21.         @mkdir -p $(dir $(@))
  22.         @echo convert $<
  23.         $(EXE) -command "serverExport $(patsubst $(RAW_SRC_DIR_)%,$<) $(patsubst $(BUILD_SRC_DIR_)%,"$(BUILD_SRC_DIR)%",$@)"
复制代码
文本内容大概如上,感谢帮忙!~ 谢谢指教

ps: 原文就是原贴.第0楼··
发表于 2013-4-25 16:36:45 | 显示全部楼层
回复 7# godzza


    你 findstr 读到的内容是以 " 开头的,所以应该是 FindStr /R /C:"^""EXE"
发表于 2013-4-25 16:38:53 | 显示全部楼层
Maya?
貌似还是半个同行噢
 楼主| 发表于 2013-4-25 18:18:34 | 显示全部楼层
回复 8# CrLf


    = = 想不到还有 "^""EXE" 这语法... 这个正则真没看懂。。 现在用vbs搞成了 哈哈
   你做maya的吗?我是在配置引擎安装,每次都人手安装太麻烦了,而且隔一段时间就忘记了。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 07:16 , Processed in 0.020843 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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