使用windows batch命令用特定字符替换整个文件数据

时间:2014-09-21 10:15:23

标签: windows batch-file

假设文件asimplefile.txt包含

  

嗨,祝你有愉快的一天

如何用0(或任何字符)替换所有内容。该文件应该看起来像“

  

000000000000000000

使用批处理命令 或直接使用Windows命令行

2 个答案:

答案 0 :(得分:3)

使用REPL.BAT - a hybrid JScript/batch utility非常简单,它在stdin上执行正则表达式搜索/替换,并将结果写入stdout。 REPL.BAT是纯脚本,可​​以在任何现代Windows机器上从XP开始本地运行。

type asimplefile.txt | repl . 0 >asimplefile.txt.new
move /y asimplefile.txt.new asimplefile.txt >nul

答案 1 :(得分:1)

将第三行替换为文件的路径。请记住,包含!的字符串将失败,FOR /F不处理为空或仅使用分隔符行填充。不确定是否要也替换新的线?

@echo off
setlocal

 set "file_tp=c:\some_file.txt"

 break>"%tmp%\zeroes"
 for /f "delims=" %%a in ('findstr /n /r "^" "%file_tp%" ') do (
    setlocal enableDelayedExpansion
    set "zero_string="
    set "line=%%a"
    set "line=!line:~2!"
    call :strlen0.3 line len

    for /l %%# in (1,1,!len!) do (
        set "zero_ztring=!zero_ztring!0"
    )
    echo !zero_ztring!>>"%tmp%\zeroes"
    endlocal

)

type "%tmp%\zeroes">"%file_tp%"
del /q /f "%tmp%\zeroes"

endlocal
goto :eof


:strlen0.3  StrVar  [RtnVar]
  setlocal EnableDelayedExpansion
  set "s=#!%~1!"
  set "len=0"
  for %%A in ( 6561 2187 729 243 81 27 9 3 1) do (
    set /A mod=2*%%A
    for %%Z in (!mod!) do (
        if !mod! GTR 8190 (
            set mod=8190
        )
        if "!s:~%%Z,1!" neq "" (
            set /a "len+=%%Z"
            set "s=!s:~%%Z!"

        ) else (
            if "!s:~%%A,1!" neq "" (
                set /a "len+=%%A"
                set "s=!s:~%%A!"
            )
        )
    )
  )
  endlocal & if "%~2" neq "" (set %~2=%len%) else echo **%len%**
exit /b