Board logo

标题: [文本处理] [已解决]如何用批处理修改HOSTS文件? [打印本页]

作者: l5mygirl    时间: 2010-9-28 20:54     标题: [已解决]如何用批处理修改HOSTS文件?

如题,127.0.0.1 下面每行前面的#删除或者替换成空格就OK,这个应该怎么写(前面的注释不用动

命令越简单越好,最好有注释或说明,万分感谢。
作者: CUer    时间: 2010-9-28 21:45

  1. 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?  
下面是我写的,这个会把前面注释部分删掉。。应该怎么改?
  1. @echo off
  2. for /f "skip=18 tokens=* delims=#" %%s in (E:\TDDOWNLOAD\hosts) do (
  3. echo 处理后:%%s
  4. echo.
  5. echo %%s>>c:\bak.txt
  6. )
  7. pause
  8. del E:\TDDOWNLOAD\hosts
  9. copy c:\bak.txt E:\TDDOWNLOAD\hosts
  10. del c:\bak.txt
复制代码

作者: l5mygirl    时间: 2010-9-29 10:33

  1. @echo off
  2. for /f "tokens=1* delims=:" %%a in ('findstr /n .* "E:\TDDOWNLOAD\hosts"') do if %%a leq 18 echo,%%b>>c:\bak.txt
  3. for /f "skip=18 tokens=* delims=#" %%s in (E:\TDDOWNLOAD\hosts) do (
  4. echo %%s>>c:\bak.txt
  5. )
  6. del E:\TDDOWNLOAD\hosts
  7. copy c:\bak.txt E:\TDDOWNLOAD\hosts
  8. 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行。


已经改好了,帮忙看看,有没有更简洁的写法?
  1. @echo off
  2. for /f "tokens=1* delims=:" %%a in ('findstr /n "127.0.0.1" "C:\WINDOWS\system32\drivers\etc\hosts"') do set a=%%a
  3. 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
  4. for /f "skip=%a% tokens=* delims=#" %%s in (C:\WINDOWS\system32\drivers\etc\hosts) do (
  5. echo %%s>>c:\bak.txt
  6. )
  7. del C:\WINDOWS\system32\drivers\etc\hosts
  8. copy c:\bak.txt C:\WINDOWS\system32\drivers\etc\hosts
  9. del c:\bak.txt
复制代码

作者: Batcher    时间: 2010-9-29 22:32

  1. @echo off
  2. set "hostfile=C:\WINDOWS\system32\drivers\etc\hosts"
  3. set "tempfile=%temp%\host.tmp"
  4. for /f "delims=:" %%a in ('findstr /n "^127.0.0.1" "%hostfile%"') do (
  5.     set "num=%%a"
  6. )
  7. type nul >"%tempfile%"
  8. for /f "tokens=1* delims=:" %%a in ('findstr /n .* "%hostfile%"') do (
  9.     set "str=%%b"
  10.     setlocal enabledelayedexpansion
  11.     if %%a leq %num% (
  12.         >>"%tempfile%" echo,%%b
  13.     ) else if "!str:~0,1!" equ "#" (
  14.         >>"%tempfile%" echo,!str:~1!
  15.     ) else (
  16.         >>"%tempfile%" echo,%%b
  17.     )
  18.     endlocal
  19. )
  20. 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

  1. type nul >"%tempfile%"    创建空文件
  2. >>"%tempfile%" echo,%%b   可以写成 echo,%%b  >>"%tempfile%"
  3. >>"%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