我希望能够有一个2选项批处理文件,可以写入四行,也可以删除这些特定行而不擦除hosts文件中的其他行。我有一个脚本,我在这里找到:Windows Batch: How to add Host-Entries?我为自己的用途进行了编辑,但我对如何解决这个问题感到非常难过,因为我很擅长编写批处理文件。认为你们可以帮助我吗?
@echo off
REM ...fluff removed...
:ACCEPTED
setlocal enabledelayedexpansion
::Create your list of host domains
set LIST=(osu.ppy.sh a.ppy.sh c.ppy.sh c1.ppy.sh)
::Set the ip of the domains you set in the list above
set osu.ppy.sh=178.62.57.37
set a.ppy.sh=178.62.57.37
set c.ppy.sh=178.62.57.37
set c1.ppy.sh=178.62.57.37
:: deletes the parentheses from LIST
set _list=%LIST:~1,-1%
::ECHO %WINDIR%\System32\drivers\etc\hosts > tmp.txt
for %%G in (%_list%) do (
set _name=%%G
set _value=!%%G!
SET NEWLINE=^& echo.
ECHO Carrying out requested modifications to your HOSTS file
::strip out this specific line and store in tmp file
type %WINDIR%\System32\drivers\etc\hosts | findstr /v !_name! > tmp.txt
::re-add the line to it
ECHO %NEWLINE%^!_value! !_name!>>tmp.txt
::overwrite host file
copy /b/v/y tmp.txt %WINDIR%\System32\drivers\etc\hosts
del tmp.txt
)
ipconfig /flushdns
ECHO.
ECHO.
ECHO Finished, you may close this window now.
GOTO END
:END
EXIT
答案 0 :(得分:1)
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
:ACCEPTED
setlocal enabledelayedexpansion
SET "filename1=%WINDIR%\System32\drivers\etc\hosts"
SET "filename1=q34775003.txt"
::Create your list of host domains
set LIST=(osu.ppy.sh a.ppy.sh c.ppy.sh c1.ppy.sh)
::Set the ip of the domains you set in the list above
set osu.ppy.sh=178.62.57.37
set a.ppy.sh=178.62.57.37
set c.ppy.sh=178.62.57.37
set c1.ppy.sh=178.62.57.37
ECHO Carrying out requested modifications to your HOSTS file
:: remove existing names from hosts file
findstr /v /e "%LIST:~1,-1%" "%filename1%"> tmp.txt
:: Add new list
for %%G in %list% do (
rem set _name=%%G
rem set _value=!%%G!
ECHO !%%G! %%G>>tmp.txt
)
::overwrite host file
move tmp.txt %filename1% >nul
)
在块语句(a parenthesised series of statements)
中,应使用REM
语句而不是断标签注释表单(:: comment
),因为标签终止块,使cmd
混淆。< / p>
这是一个完整的修订,因为我犯了解释原始批次正在做什么。
这意味着这将取代:ACCEPTED
例程 - 您需要重新插入ipconfig
命令
filename1
设置为真正的文件位置,然后设置为测试文件位置以进行测试。您需要删除多余的设置。
首先,删除现有的名称条目,并使用余数创建temp.txt
。要匹配(并因此删除)名称必须在该行的末尾匹配,因此a.ppy.sh
将被删除,但a.ppy.shx
将被保留。
接下来,新条目将附加到temp.txt
最后,move
替换原始文件。
所有需要做的就是使用虚拟文件进行测试,经过验证后,将ipconfig...
行添加到原始
最后,
答案 1 :(得分:0)
如果您打算写入或删除相同的四行,为什么不创建和维护两个文件(短版和长版)?然后根据你想做的事情复制相应的文件?
示例:
pushd %systemroot%\system32\drivers\etc
choice /C:SL "Choose S for short or L for long."
IF errorlevel 2 goto long
IF errorlevel 1 goto short
:long
copy hosts.long hosts
goto end
:short
copy hosts.short hosts
goto end
:end
popd
就个人而言,我使用的是PowerShell,但您确实询问过批处理文件。