创建批处理文件以遍历文本文件并删除所有引号

时间:2018-08-31 10:04:06

标签: batch-file text-files

我正在尝试编写一个批处理文件,该批处理文件将遍历一个文件夹中的所有文本文件,并删除每个文本文件中的引号,但也会覆盖它们,因此它们仍具有相同的文件名。

我已经编写了一个批处理文件,该批处理文件使用一个称为limits.txt的特定文本文件来执行此操作,然后它将相同的文本文件保存在limits_new.txt中,但不带引号:

@echo off
if not exist "limits.txt" goto :EOF
setlocal EnableDelayedExpansion
del "limits_new.txt" 2>nul
for /F "usebackq delims=" %%I in ("limits.txt") do (
set "Line=%%I"
set "Line=!Line:"= !" 
echo !Line!>>"limits_new.txt"
)
del "limits.txt"
endlocal

所以我该如何更改它以浏览更多的文本文件,如limits1.txt test.txt 并覆盖它们而没有引号。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您可以只使用另一个for,然后用您要使用的变量替换文件名:

@echo off

for %%f in (*.txt) do (
    setlocal EnableDelayedExpansion
    del "%%f.new" 2>nul
    for /F "usebackq delims=" %%I in ("%%f") do (
        set "Line=%%I"
        set "Line=!Line:"= !" 
        echo !Line!>>"%%f.new"
    )
    del "%%f"
    ren "%%f.new" "%%f"
    endlocal
)

这将从limits.txt生成limits.txt.new,然后用新版本替换原始limits.txt。如果要保留limits_new.txt命名约定,那么我想将%%~nf_new.txt作为输出文件名并删除ren

请注意,如果您有sed,例如在Git Bash中,您可以使用正则表达式进行就地文件编辑:

sed -i -e "s/\"/ /g" limits.txt

并且Git Bash具有类似的for,您可以使用它来更新所有文件,例如

for _f in *.txt; do sed -i -e 's/"/ /g' $_f; done

但是要小心:根据从那里获取sed的情况,也可能会将所有行尾从CRLF切换到LF。