用于替换字符串的 bat 脚本创建空文件
bat script for replacing strings creates empty file
我正在使用此 bat 文件将 web.config 中的值从 httpTransport 修改为 httpsTransport。如果我将输出定向到另一个文件,它会很好地工作。如果我尝试覆盖我的文件,它会创建一个空文件。
@echo off &setlocal
set "search=httpsTransport"
set "replace=http123Transport"
set INTEXTFILE=D:\teste_bat\Web.config
set OUTTEXTFILE=D:\teste_bat\WebTemp.config
(for /f "delims=" %%i in ('findstr "^" "%INTEXTFILE%"') do (
set "line=%%i"
setlocal enabledelayedexpansion
set "line=!line:%search%=%replace%!"
echo(!line!
endlocal
))>>"%OUTTEXTFILE%"
del %INTEXTFILE%
rename %OUTTEXTFILE% %INTEXTFILE%
如有帮助,我们将不胜感激
以下代码在INTEXTFILE
和OUTTEXTFILE
指向同一个文件的情况下失败,因为输出重定向>
在开头准备输出文件,所以它创建了一个空文件,然后由 findstr
:
读取
set "INTEXTFILE=D:\teste_bat\Web.config"
set "OUTTEXTFILE=D:\teste_bat\Web.config"
> "%OUTTEXTFILE%" (
for /f "delims=" %%i in ('findstr "^" "%INTEXTFILE%"') do (
set "line=%%i"
setlocal enabledelayedexpansion
set "line=!line:%search%=%replace%!"
echo(!line!
endlocal
)
)
用 >>
替换 >
也不起作用,因为这会将新数据附加到原始文件。
要克服这个问题,您有两个选择:
要写入不同的文件并在末尾用新文件替换原始文件:
set "INTEXTFILE=D:\teste_bat\Web.config"
set "OUTTEXTFILE=D:\teste_bat\WebTemp.config"
> "%OUTTEXTFILE%" (
for /f "delims=" %%i in ('findstr "^" "%INTEXTFILE%"') do (
set "line=%%i"
setlocal enabledelayedexpansion
set "line=!line:%search%=%replace%!"
echo(!line!
endlocal
)
)
move /Y "%OUTTEXTFILE%" "%INTEXTFILE%"
由于性能更好,这是推荐的变体。
要确保在应用输出重定向之前读取文件:
set "INTEXTFILE=D:\teste_bat\Web.config"
set "OUTTEXTFILE=D:\teste_bat\Web.config"
for /f "delims=" %%i in ('findstr "^" "%INTEXTFILE%" ^& ^> "%OUTTEXTFILE%" rem/') do (
set "line=%%i"
setlocal enabledelayedexpansion
set "line=!line:%search%=%replace%!"
>> "%OUTTEXTFILE%" echo(!line!
endlocal
)
由于有多个文件访问操作(由于>>
,每次循环迭代都会附加到文件),这在性能上更差,但它避免了对临时文件的需要。 > "%OUTTEXTFILE%" rem/
部分在 findstr
读取 后耗尽文件 ,然后将其附加到循环体的后面。
我正在使用此 bat 文件将 web.config 中的值从 httpTransport 修改为 httpsTransport。如果我将输出定向到另一个文件,它会很好地工作。如果我尝试覆盖我的文件,它会创建一个空文件。
@echo off &setlocal
set "search=httpsTransport"
set "replace=http123Transport"
set INTEXTFILE=D:\teste_bat\Web.config
set OUTTEXTFILE=D:\teste_bat\WebTemp.config
(for /f "delims=" %%i in ('findstr "^" "%INTEXTFILE%"') do (
set "line=%%i"
setlocal enabledelayedexpansion
set "line=!line:%search%=%replace%!"
echo(!line!
endlocal
))>>"%OUTTEXTFILE%"
del %INTEXTFILE%
rename %OUTTEXTFILE% %INTEXTFILE%
如有帮助,我们将不胜感激
以下代码在INTEXTFILE
和OUTTEXTFILE
指向同一个文件的情况下失败,因为输出重定向>
在开头准备输出文件,所以它创建了一个空文件,然后由 findstr
:
set "INTEXTFILE=D:\teste_bat\Web.config"
set "OUTTEXTFILE=D:\teste_bat\Web.config"
> "%OUTTEXTFILE%" (
for /f "delims=" %%i in ('findstr "^" "%INTEXTFILE%"') do (
set "line=%%i"
setlocal enabledelayedexpansion
set "line=!line:%search%=%replace%!"
echo(!line!
endlocal
)
)
用 >>
替换 >
也不起作用,因为这会将新数据附加到原始文件。
要克服这个问题,您有两个选择:
要写入不同的文件并在末尾用新文件替换原始文件:
set "INTEXTFILE=D:\teste_bat\Web.config" set "OUTTEXTFILE=D:\teste_bat\WebTemp.config" > "%OUTTEXTFILE%" ( for /f "delims=" %%i in ('findstr "^" "%INTEXTFILE%"') do ( set "line=%%i" setlocal enabledelayedexpansion set "line=!line:%search%=%replace%!" echo(!line! endlocal ) ) move /Y "%OUTTEXTFILE%" "%INTEXTFILE%"
由于性能更好,这是推荐的变体。
要确保在应用输出重定向之前读取文件:
set "INTEXTFILE=D:\teste_bat\Web.config" set "OUTTEXTFILE=D:\teste_bat\Web.config" for /f "delims=" %%i in ('findstr "^" "%INTEXTFILE%" ^& ^> "%OUTTEXTFILE%" rem/') do ( set "line=%%i" setlocal enabledelayedexpansion set "line=!line:%search%=%replace%!" >> "%OUTTEXTFILE%" echo(!line! endlocal )
由于有多个文件访问操作(由于
>>
,每次循环迭代都会附加到文件),这在性能上更差,但它避免了对临时文件的需要。> "%OUTTEXTFILE%" rem/
部分在findstr
读取 后耗尽文件 ,然后将其附加到循环体的后面。