标题: [文本处理] [已解决]如何用批处理修改HOSTS文件? [打印本页]
作者: l5mygirl 时间: 2010-9-28 20:54 标题: [已解决]如何用批处理修改HOSTS文件?
如题,127.0.0.1 下面每行前面的#删除或者替换成空格就OK,这个应该怎么写(前面的注释不用动
命令越简单越好,最好有注释或说明,万分感谢。
作者: CUer 时间: 2010-9-28 21:45
- sed -i "/127.0.0.1/,$ s/^#//" "C:\Windows\System32\drivers\etc\hosts"
复制代码
作者: l5mygirl 时间: 2010-9-28 22:12
#192.168.0.1 lala.com
#192.168.0.2 lala.net
上面的变成这样
192.168.0.1 lala.com
192.168.0.2 lala.net
但是127.0.0.1这一行前面的是HOSTS里的注释,这些不册不册无所谓,怎么做才能只对后面的做修改?
作者: CUer 时间: 2010-9-28 22:35
2楼代码就是这样做的
作者: l5mygirl 时间: 2010-9-29 08:20
新建文本,sed -i "/127.0.0.1/,$ s/^#//" "C:\Windows\System32\drivers\etc\hosts" 另存为1.BAT,运行。HOSTS一点改变没有。。
作者: yangfengoo 时间: 2010-9-29 09:23
你是否下载了sed?
作者: Batcher 时间: 2010-9-29 09:29 标题: 回复 5楼 的帖子
sed.exe 下载地址:
http://bbs.bathome.net/thread-3981-1-1.html
作者: l5mygirl 时间: 2010-9-29 09:33
我刚学习批处理,不太懂,还需要下载SED吗? 这个批处理要在好多机器上用,是否每台机器都需要下载SED?
下面是我写的,这个会把前面注释部分删掉。。应该怎么改?- @echo off
- for /f "skip=18 tokens=* delims=#" %%s in (E:\TDDOWNLOAD\hosts) do (
- echo 处理后:%%s
- echo.
- echo %%s>>c:\bak.txt
- )
- pause
- del E:\TDDOWNLOAD\hosts
- copy c:\bak.txt E:\TDDOWNLOAD\hosts
- del c:\bak.txt
复制代码
作者: l5mygirl 时间: 2010-9-29 10:33
- @echo off
- for /f "tokens=1* delims=:" %%a in ('findstr /n .* "E:\TDDOWNLOAD\hosts"') do if %%a leq 18 echo,%%b>>c:\bak.txt
- for /f "skip=18 tokens=* delims=#" %%s in (E:\TDDOWNLOAD\hosts) do (
- echo %%s>>c:\bak.txt
- )
- del E:\TDDOWNLOAD\hosts
- copy c:\bak.txt E:\TDDOWNLOAD\hosts
- del c:\bak.txt
复制代码
问题已经解决,感谢bat-yangfengoo 感谢楼上各位朋友
作者: Batcher 时间: 2010-9-29 10:54 标题: 回复 9楼 的帖子
正确的方法是自动判断127.0.0.1在第几行,而不是写死了它在第18行。
作者: l5mygirl 时间: 2010-9-29 17:08
原帖由 Batcher 于 2010-9-29 10:54 发表
正确的方法是自动判断127.0.0.1在第几行,而不是写死了它在第18行。
已经改好了,帮忙看看,有没有更简洁的写法?- @echo off
- for /f "tokens=1* delims=:" %%a in ('findstr /n "127.0.0.1" "C:\WINDOWS\system32\drivers\etc\hosts"') do set a=%%a
- for /f "tokens=1* delims=:" %%a in ('findstr /n .* "C:\WINDOWS\system32\drivers\etc\hosts"') do if %%a leq %a% echo,%%b>>c:\bak.txt
- for /f "skip=%a% tokens=* delims=#" %%s in (C:\WINDOWS\system32\drivers\etc\hosts) do (
- echo %%s>>c:\bak.txt
- )
- del C:\WINDOWS\system32\drivers\etc\hosts
- copy c:\bak.txt C:\WINDOWS\system32\drivers\etc\hosts
- del c:\bak.txt
复制代码
作者: Batcher 时间: 2010-9-29 22:32
- @echo off
- set "hostfile=C:\WINDOWS\system32\drivers\etc\hosts"
- set "tempfile=%temp%\host.tmp"
- for /f "delims=:" %%a in ('findstr /n "^127.0.0.1" "%hostfile%"') do (
- set "num=%%a"
- )
- type nul >"%tempfile%"
- for /f "tokens=1* delims=:" %%a in ('findstr /n .* "%hostfile%"') do (
- set "str=%%b"
- setlocal enabledelayedexpansion
- if %%a leq %num% (
- >>"%tempfile%" echo,%%b
- ) else if "!str:~0,1!" equ "#" (
- >>"%tempfile%" echo,!str:~1!
- ) else (
- >>"%tempfile%" echo,%%b
- )
- endlocal
- )
- move /y "%tempfile%" "%hostfile%"
复制代码
作者: l5mygirl 时间: 2010-9-29 23:18
@echo off
set "hostfile=C:\WINDOWS\system32\drivers\etc\hosts"
set "tempfile=%temp%\host.tmp"
for /f "delims=:" %%a in ('findstr /n "^127.0.0.1" "%hostfile%"') do (
set "num=%%a"
)
type nul >"%tempfile%" 显示什么,这行代码是什么意思?有什么作用?
for /f "tokens=1* delims=:" %%a in ('findstr /n .* "%hostfile%"') do (
set "str=%%b"
setlocal enabledelayedexpansion
if %%a leq %num% (
>>"%tempfile%" echo,%%b 这个是将%%b写入到host.tmp里面? echo,%%是格式? 这行可以写成 echo ,%%b>>"%tempfile%"吗?
) else (
>>"%tempfile%" echo,!str:~1! 这个的意思应该是去掉每行第一个字符吧
)
endlocal
)
move /y "%tempfile%" "%hostfile%"
抱歉,我学的比较慢,这个先帮忙说明一下。
作者: Batcher 时间: 2010-9-30 09:23
12楼代码已更新
作者: l5mygirl 时间: 2010-9-30 09:30
原帖由 Batcher 于 2010-9-30 09:23 发表
12楼代码已更新
13楼的问题能帮忙解答一下吗?
作者: yangfengoo 时间: 2010-9-30 09:42
- type nul >"%tempfile%" 创建空文件
- >>"%tempfile%" echo,%%b 可以写成 echo,%%b >>"%tempfile%"
- >>"%tempfile%" echo,!str:~1! 去掉每行第一个字符
复制代码
作者: l5mygirl 时间: 2010-9-30 10:03
嗯,明白了,非常感谢。。 闭贴。
作者: Batcher 时间: 2010-9-30 10:31 标题: 回复 16楼 的帖子
第二行代码,行尾会产生多余的空格,不建议这样改。
作者: badtobone 时间: 2010-9-30 11:31
看看,学习了。。。。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |