找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 92857|回复: 18

[文本处理] [已解决]如何用批处理修改HOSTS文件?

[复制链接]
发表于 2010-9-28 20:54:14 | 显示全部楼层 |阅读模式
如题,127.0.0.1 下面每行前面的#删除或者替换成空格就OK,这个应该怎么写(前面的注释不用动

命令越简单越好,最好有注释或说明,万分感谢。

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2010-9-28 21:45:25 | 显示全部楼层
  1. sed -i "/127.0.0.1/,$ s/^#//" "C:\Windows\System32\drivers\etc\hosts"
复制代码
 楼主| 发表于 2010-9-28 22:12:15 | 显示全部楼层
#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里的注释,这些不册不册无所谓,怎么做才能只对后面的做修改?
发表于 2010-9-28 22:35:42 | 显示全部楼层
2楼代码就是这样做的
 楼主| 发表于 2010-9-29 08:20:17 | 显示全部楼层
新建文本,sed -i "/127.0.0.1/,$ s/^#//" "C:\Windows\System32\drivers\etc\hosts" 另存为1.BAT,运行。HOSTS一点改变没有。。
发表于 2010-9-29 09:23:59 | 显示全部楼层
你是否下载了sed?
发表于 2010-9-29 09:29:21 | 显示全部楼层

回复 5楼 的帖子

 楼主| 发表于 2010-9-29 09:33:06 | 显示全部楼层
我刚学习批处理,不太懂,还需要下载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
复制代码
 楼主| 发表于 2010-9-29 10:33:14 | 显示全部楼层
  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 感谢楼上各位朋友
发表于 2010-9-29 10:54:34 | 显示全部楼层

回复 9楼 的帖子

正确的方法是自动判断127.0.0.1在第几行,而不是写死了它在第18行。
 楼主| 发表于 2010-9-29 17:08:55 | 显示全部楼层
原帖由 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
复制代码
发表于 2010-9-29 22:32:52 | 显示全部楼层
  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%"
复制代码
 楼主| 发表于 2010-9-29 23:18:49 | 显示全部楼层
@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%"

抱歉,我学的比较慢,这个先帮忙说明一下。
发表于 2010-9-30 09:23:35 | 显示全部楼层
12楼代码已更新
 楼主| 发表于 2010-9-30 09:30:31 | 显示全部楼层
原帖由 Batcher 于 2010-9-30 09:23 发表
12楼代码已更新


13楼的问题能帮忙解答一下吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 12:19 , Processed in 0.034111 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表