我正在尝试编写一个批处理文件,该批处理文件将遍历一个文件夹中的所有文本文件,并删除每个文本文件中的引号,但也会覆盖它们,因此它们仍具有相同的文件名。
我已经编写了一个批处理文件,该批处理文件使用一个称为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 并覆盖它们而没有引号。
感谢您的帮助!
答案 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。