标题: [文本处理] 如何取消批处理百分号%的转义符功能? [打印本页]
作者: godzza 时间: 2013-4-25 15:07 标题: 如何取消批处理百分号%的转义符功能?
例如我需要在某文件中替换 某些符合条件的功能- ::::::::::::::::::::::::: Test File Start
- include def.mk
- #include mayasrc.mk
- #MAYA_FILES += $(TESTTRACK_FILES)
- MAYA_DIR_MODEL := $(RAW_SRC_DIR_)/model
- EXE = "%MayaPath%/bin/mayabatch.exe"
- $(PRO) -command "serverExport $("D:/BikeGame_fullpath/ArtResource/",$<) $(patsubst $(BUILD_SRC_DIR_)%,\"$(BUILD_SRC_DIR)%\",$@)"
- ::::::::::::::::::::::::: Test File End
-
- for /f "tokens=*" %%a in ('type "!file!"') do (
- echo "%%a"|FindStr /C:"EXE"
- )
复制代码
此时%%a 会转换为某些行,例如:$(PRO) -command "serverExport $("D:/BikeGame_fullpath/ArtResource/",$<) $(patsubst $(BUILD_SRC_DIR_)%,\"$(BUILD_SRC_DIR)%\",$@)"
但是这句包含百分号,会继续转换. 所以导致输出不正确的数据.或直接显示“没有找到指定文件”
请问各位有否解决办法?(不用vbs ect)
作者: CrLf 时间: 2013-4-25 15:26
可以这样:- for /f "tokens=*" %%a in ('type "!file!"') do (
- setlocal disabledelayedexpansion
- set "str=%%a"
- cmd /v /c echo "!str!"|FindStr /C:"EXE"
- endlocal
- )
复制代码
或者- (cmd /c for /f "tokens=*" %%a in ('type "!file!"') do echo "%%a")|FindStr /C:"EXE"
复制代码
再或者- @echo off
- %*
- call %0 goto type|FindStr /C:"EXE"
- pause&exit/b
-
- :type
- setlocal enabledelayedexpansion
- for /f "tokens=*" %%a in ('type "!file!"') do (
- echo "%%a"
- )
复制代码
但最主要的是,楼主的代码和这句有明显的功能区别吗?复制代码
作者: godzza 时间: 2013-4-25 15:52
回复 2# CrLf
谢谢!原来 cmd 还有 /v /c 等开关~
Find命令也可以,但是我想使用正则表达式,过滤掉不是EXE开头的。但是直接使用FindStr /C:"^EXE" 貌似使用不了?再请教下CrLf对正则表达可有研究?
再表感谢!
作者: CrLf 时间: 2013-4-25 15:58
本帖最后由 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
作者: godzza 时间: 2013-4-25 16:06
本帖最后由 godzza 于 2013-4-25 16:09 编辑
回复 4# CrLf
看过一点,- for /f "tokens=*" %%a in ('type "!file!"') do (
- setlocal disabledelayedexpansion
- set "str=%%a"
- cmd /v /c echo "!str!"|FindStr /R /C:"^EXE"
- endlocal
- )
复制代码
我的脚本是这样, 但是貌似没有得到预期的结果...(原文中第6行没找到 )
作者: CrLf 时间: 2013-4-25 16:14
回复 5# godzza
那你得把原文发上来
作者: godzza 时间: 2013-4-25 16:30
本帖最后由 godzza 于 2013-4-25 16:31 编辑
回复 6# CrLf - include def.mk
- #include mayasrc.mk
-
- EXE = "F:/Program Files (x86)/Autodesk/Maya2012/bin/mayabatch.exe"
-
- SRCS_DIR = $(MAYA_DIR_MODEL)/
- OBJS_DIR = $(BUILD_SRC_DIR_)/model/maya/
- REF_SRCS_DIR = $(MAYA_REF_SCENE)/
- REF_OBJS_DIR = $(BUILD_SRC_DIR_)/reference/
- ANIM_SRCS_DIR = $(MAYA_DIR_ANIM)/
- ANIM_OBJS_DIR = $(BUILD_SRC_DIR_)/anim/maya/
-
- 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))
-
- include mayadepend.mk
-
- $(OBJS_DIR)%.xml: $(SRCS_DIR)%.mb maya.trigger
- @mkdir -p $(dir $(@))
- @echo convert $<
- $(EXE) -command "serverExport $(patsubst $(RAW_SRC_DIR_)%,\"$(RAW_SRC_DIR)%\",$<) $(patsubst $(BUILD_SRC_DIR_)%,\"$(BUILD_SRC_DIR)%\",$@)"
-
- $(REF_OBJS_DIR)%.xml: $(REF_SRCS_DIR)%.mb maya.trigger
- @mkdir -p $(dir $(@))
- @echo convert $<
- $(EXE) -command "serverExport $(patsubst $(RAW_SRC_DIR_)%,\"$(RAW_SRC_DIR)%\",$<) $(patsubst $(BUILD_SRC_DIR_)%,\"$(BUILD_SRC_DIR)%\",$@)"
-
-
- $(ANIM_OBJS_DIR)%.xml: $(ANIM_SRCS_DIR)%.mb maya.trigger
- @mkdir -p $(dir $(@))
- @echo convert $<
- $(EXE) -command "serverExport $(patsubst $(RAW_SRC_DIR_)%,$<) $(patsubst $(BUILD_SRC_DIR_)%,\"$(BUILD_SRC_DIR)%\",$@)"
复制代码
文本内容大概如上,感谢帮忙!~ 谢谢指教
ps: 原文就是原贴.第0楼··
作者: CrLf 时间: 2013-4-25 16:36
回复 7# godzza
你 findstr 读到的内容是以 " 开头的,所以应该是 FindStr /R /C:"^""EXE"
作者: CrLf 时间: 2013-4-25 16:38
Maya?
貌似还是半个同行噢
作者: godzza 时间: 2013-4-25 18:18
回复 8# CrLf
= = 想不到还有 "^""EXE" 这语法... 这个正则真没看懂。。 现在用vbs搞成了 哈哈
你做maya的吗?我是在配置引擎安装,每次都人手安装太麻烦了,而且隔一段时间就忘记了。。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |