.bat从多个.txt文件中删除字符串

时间:2016-04-24 18:06:45

标签: batch-file

我在同一个文件夹中有10个文本文件,其中包含以下列表:

abc0012345
abc0012346
abc0012347
abc0012348
abc0012349
abc0012350
abc0012351
abc0012352

我有一个remove.txt文件,其中包含我要删除的字符串,它包含abc0012347abc0012351,我还想删除它们留下的空白

使用下面的代码,我可以列出是否可以在10个文本文件中找到字符串但我在删除字符串时遇到问题

:: /i   `: Specifies that the search is not to be case-sensitive. 
:: /g: file   `: Gets search strings from the specified file. 
Rem "List of systems before removing from tag files"
echo off
c:
cd C:\StringFiles
findstr /I /G:"remove.txt" *.txt
pause

rem the following line removes specific entry from text file but I need it to look in the remove.txt file for the strings to remove and then loop through all text files
rem type C:\E\TagFiles\2.txt | repl "stc0012345+" "" X | repl "\r?\n?\s*$" "" M > C:\E\TagFiles\2.out.txt`

2 个答案:

答案 0 :(得分:2)

如果您的FINDSTR命令正确列出了应删除的行,那么您只需/V选项即可打印匹配的所有行。

您还需要FOR循环来迭代文件。您可以将保留的内容写出到新文件,然后使用MOVE将原始内容替换为新文件。您还要确保不要修改“remove.txt”。

for %%F in (*.txt) do if /i "%%F" neq "remove.txt" (
  findstr /vig:"remove.txt" "%%F" >"%%F.new"
  move /y "%%F.new" "%%F" >nul
)

REPL.BAT不适合此问题,因为它没有内置功能来加载搜索或替换其他文件中的字符串。

如果您想将REPL.BAT用于其他任务,那么我建议您升级到较新的JREPL.BAT实用程序。它具有REPL.BAT的所有功能,还有更多功能。但是,对于这个问题,它仍然不是一个好的选择。

答案 1 :(得分:1)

替换文件中的文本(使用powershell):

(Get-Content <file_name>) | ForEach-Object { $_ -replace <pattern>, <replacement-string> } | Set-Content <file_name>

执行示例:powershell -Command "(gc myFile.txt) -replace 'foo', 'bar' | Out-File myFile.txt"

示例说明:

  • powershell启动了PowerShell.exe,它包含在Windows 7中
  • 命令&#34; ...&#34;是powershell.exe的命令行arg,包含要运行的命令(gc myFile.txt)读取myFile.txt的内容(gc是Get-Content命令的缩写)
  • 替换&#39; foo&#39;,&#39; bar&#39;只需运行replace命令即可替换foo 带吧| Out-File myFile.txt将输出传递给文件myFile.txt

参考:how-can-you-find-and-replace-text-in-a-file

在.bat文件中执行powershell:

从文件中删除powershell.exe并将其另存为.ps1,然后创建.bat文件并写入powershell.exe -file myscript.ps1

注意:Powershell.exe应该是PATH语句的一部分。 powershell的默认位置:"C:\WINDOWS\system32\WindowsPowerShell\v1.0"