2015-10-18 92 views
0

我想问问你,我怎么可以这样做: 我在文件夹中,car.txtbus.txtplane.txt三个文件。文件car.txt包含一些带有字符串的文本,例如test="in_car“我知道,我发现带有前缀”in_“的单词+来自文件名”car“的单词,如果找到它,我想用单词”hello“替换它。文件bus.txtplane.txt做同样的事情,找字in_bushello等代替它,我知道前缀“in_”只有在这个地方 ,能不能请你帮我批处理文件 - 在文件中查找字符串的文件名的子串并替换

我尝试这样的事情。?

for /R "../myFolder" %%f in (*.txt) do ( 
    set FILENAME=%%~nf 
    set PREFIX=in_ 
    set REPLACETEXT=hello 
    SET string=%%A 
    set modified=!string:%PREFIX%%FILENAME%=%REPLACETEXT%! 
) 

但它不是工作,我不知道,我怎么能保存到当前文件(文件替换)

+0

听起来像是一个正则表达式的工作。 –

+0

我尝试这样: 用于/ R “../myFolder” %% F IN(* .TXT)做( 集FILENAME = %%〜NF 集PREFIX = IN_ 集REPLACETEXT =你好 SET字符串= %% A set modified =!string:%PREFIX %% FILENAME%=%REPLACETEXT%! ) 但它不工作,我不知道,我该如何将它保存到当前文件(将其替换为文件中) – user5458916

+2

请不要在评论中发布代码片段;相反,你的问题。我做了一些场合。 – JosefZ

回答

1

您忘记另一个for(读取文件)(虽然你明明计划好了,当你使用%%A):

@echo off 
setlocal enabledelayedexpansion 
set PREFIX=in_ 
set REPLACETEXT=hello 
for /R "." %%f in (*.txt) do ( 
    set FILENAME=%%~nf 
    (for /f "delims=" %%A in (%%f) do (
     SET string=%%A 
     set modified=!string:%PREFIX%%%~nf=%REPLACETEXT%! 
     echo !modified! 
     REM echo !string:%PREFIX%%%~nf=%REPLACETEXT%! 
    ))>%%~dpnf.new 
) 
+0

1.如果文件名中有空格,或者还有'&'和'^'等特殊字符,则可能会失败; 2.什么是“REM”系列? – aschipfl

0

,所以我有这个功能的解决方案:

pushd "../myFolder" 
Setlocal enabledelayedexpansion 

set "FILENAME=%%~nf" 
set "OUTPUT=%%~nxf" 
set "PREFIX=in_" 
set "REPLACETEXT=hello" 
set "TEMP=tmp" 

for /R %%f in (*.txt) do (
    for /f "delims=" %%A in (%%f) do (
     SET "string=%%A" 
     SET modified=!string:%PREFIX%%FILENAME%=%REPLACETEXT%! 
     echo !modified! >> %TEMP% 
    ) 
    del %OUTPUT% 
    rename %TEMP% %OUTPUT% 
) 
popd 

但仍然有一个问题,我没有性格!在输出文件的总结中,一行包含<! - (没有空格,但我不能在这里写它),但在输出中我只有这个< -

+0

我拥有它!我设置“setLocal”以禁用,如果为循环,我启用它:)非常感谢你:) – user5458916

相关问题