在 BAT 文件脚本中,如果 FILE 不包含该行,则在 FILE 中添加新行

In BAT file script, add new line in FILE if FILE doesn't contain that line

我想在 hosts 文件中添加一行:

127.0.0.1       new-host

如果不包含此行。

windows 中使用 bat 脚本。

示例 1

脚本之前:

127.0.0.1       db
127.0.0.1       host

脚本后:

127.0.0.1       db
127.0.0.1       host
127.0.0.1       new-host

示例 2

脚本之前:

127.0.0.1       db
127.0.0.1       host
127.0.0.1       new-host

脚本后:

127.0.0.1       db
127.0.0.1       host
127.0.0.1       new-host

我的代码:

for /f "delims=" %%i in ('findstr /c:"new-host" "c:\Windows\System32\Drivers\etc\hosts"') do set actualLineHost=%%i
echo %actualLineHost%

if "%actualLineHost:"=.%"==".." (
    echo empty
    goto empty
) else (
    echo not empty
    goto notempty
)

findstr /c:"new-host" "c:\Windows\System32\Drivers\etc\hosts" 在命令行中工作正常 returns 什么都没有,但是当我 运行 一个脚本 "not empty" 当文件不包含行时

试试这个代码:

@echo off
findstr /m "new-host" C:\Windows\System32\drivers\etc\hosts
if %errorlevel%==0 (
echo Found!
) else (
echo No matches found
echo 127.0.0.1       new-host >> C:\Windows\System32\drivers\etc\hosts
)
pause

这将启动 findstr cmd 以在文件中搜索一个(或多个)定义字符串,在此之后,我们检查命令 return 是否错误,如果没有错误,我们回显到将行写入文件( >> 用于换行)

不使用的解决方案errorlevel

for /f "delims=" %%i in ('findstr /c:"new-host" "c:\Windows\System32\Drivers\etc\hosts"') do goto hostContains
echo 127.0.0.1       new-host >> c:\Windows\System32\Drivers\etc\hosts
echo "Not found"
goto exit

:hostContains
echo "Found"
:exit