2014-08-31 85 views
0

我希望批处理文件搜索?符号并将其替换为txt文件中的%符号要搜索的批处理文件?并在txt文件中用%替换它

我看到很多搜索和替换代码,它不会被替换吗?与%

如果任何一个有代码,它工作在VBS张贴

例如:

@echo off  
setlocal 
set "search=?"        
set "replace=%"        
set "textfile=test.txt" 
set "newfile=newtest.txt" 

(for /f "delims=" %%i in ('findstr /n "^" "%textfile%"') do (
set "line=%%i" 
setlocal enabledelayedexpansion 
set "line=!line:%search%=%replace%!" 
echo(!line! 
endlocal 
))>"%newfile%" 
type "%newfile%" > nul 
+0

@Mofi - 只是发布这个答案。尽管我不确定OP是否想要新文件中的行号 – npocmaka 2014-08-31 21:21:49

+0

thankyou mofi它是工作! – user3752270 2014-08-31 21:28:05

回答

1

此批解决方案比有问题的批处理脚本更好,因为它不添加行号到新的文件。

@echo off 
setlocal EnableDelayedExpansion 
set "search=?" 
set "replace=%%" 
set "textfile=test.txt" 
set "newfile=newtest.txt" 
if exist "%newfile%" del "%newfile%" 
for /F "usebackq delims=" %%L in ("%textfile%") do (
    set "Line=%%L" 
    set "Line=!Line:%search%=%replace%!" 
    if not "!Line: =!"=="" echo !Line!>>"%newfile%" 
) 
endlocal 

注意!

空白行,并与test.txt仅仅空格线的复制与?%取代线newtest.txt删除。只有水平制表符的行会导致写入新文件的状态为echo。所以我建议使用文本编辑器进行替换,而不是使用批处理文件进行替换,尽管我认为可以改进代码以仅将空白行和空行复制到新文件中。

0

这可以使用PowerShell的帮助可以轻松实现,使用一个命令行的,正确的从命令控制台。请参阅下面的示例。如果您打算在批处理文件中使用它,请将%替换为%%。

C:\Scripts>type input.txt 
Sometext ? here 
here is another ? text 
?? test file.. 
sample?? 

C:\Scripts>powershell -command (get-content input.txt ^| %{ $_ -replace \"\?\",\"%\"}) 
Sometext % here 
here is another % text 
%% test file.. 
sample%% 

干杯,G

+0

必须对其进行修改才能使其在批处理文件中工作 - '%'需要加倍到'%%' – foxidrive 2014-09-01 04:29:07