我在同一个文件夹中有10个文本文件,其中包含以下列表:
abc0012345
abc0012346
abc0012347
abc0012348
abc0012349
abc0012350
abc0012351
abc0012352
我有一个remove.txt文件,其中包含我要删除的字符串,它包含abc0012347
和abc0012351
,我还想删除它们留下的空白
使用下面的代码,我可以列出是否可以在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`
答案 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"
示例说明:
参考: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"