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

[文本处理] [已解决]请问批处理如何对for语句里的变量进行判断赋值?

[复制链接]
发表于 2011-9-18 12:57:53 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2016-11-5 13:08 编辑

a.txt文本内容为:
162.244.13.82:3128
222.200.3.31:8909
212.100.253.31:8909

…………

想得到如下效果(包含上述IP的小IP段范围,最后去重复)
162.244.8.0 162.244.18.255
222.200.0.0 222.200.8.255
212.100.248.0 212.100.255.255

其中 8=13-5,18=13+5.(5为自己输入,如果出现小于0,或者大于255,则改为0,或者255
我编写的代码如下,但是“如果出现小于0,或者大于255,则改为0,或者255”不知道如何写?请大家帮忙。
  1. @echo off&setlocal enabledelayedexpansion
  2. set /p z=请输入加减量:
  3. for /f "delims=. tokens=1-3" %%a in ('type ip.txt') do (
  4. set /a x=%%c-z
  5. set /a y=%%c+z
  6. echo %%a.%%b.!x!.0 %%a.%%b.!y!.255>>tmp.txt
  7. )
  8. (for /f "delims=" %%i in (tmp.txt) do (
  9. if not defined "%%i" echo %%i&set ""%%i"=i"
  10. ))>IPrangge+port.txt
  11. del /q tmp.txt
  12. exit
复制代码
之前看过这个http://www.bathome.net/thread-5427-1-1.html  批处理字符替换:在小于10的数字前面补零
但是他的字符串用,隔开的,默认为多个字符,用for %%b in (%%a) do 就搞定了,但是我这个不行。

希望大家帮帮忙,最好是运行速度比较快点。(我之前想过先将.替换为,再用上面这个帖子的方法,但是觉得肯定费时间,不是上策)

O(∩_∩)O谢谢

评分

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

查看全部评分

发表于 2011-9-18 13:17:18 | 显示全部楼层
回复 1# super1129

  1. @echo off&setlocal enabledelayedexpansion
  2. set /p z=请输入加减量:
  3. for /f "delims=. tokens=1-3" %%a in ('type ip.txt') do (
  4. set /a x=%%c-z
  5. set /a y=%%c+z
  6. if !x! lss 0 set x=0
  7. if !y! gtr 255 set y=255
  8. echo %%a.%%b.!x!.0 %%a.%%b.!y!.255>>tmp.txt
  9. )
  10. (for /f "delims=" %%i in (tmp.txt) do (
  11. if not defined "%%i" echo %%i&set ""%%i"=i"
  12. ))>IPrangge+port.txt
  13. del /q tmp.txt
  14. exit
复制代码

评分

参与人数 1技术 +1 收起 理由
super1129 + 1 谢谢,解决问题

查看全部评分

发表于 2011-9-18 21:14:54 | 显示全部楼层
不必使用临时文件
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /p z=请输入加减量:
  4. (for /f "tokens=1-3 delims=." %%a in (a.txt) do (
  5.     set /a x=%%c-z
  6.     set /a y=%%c+z
  7.     if !x! lss 0 set x=0
  8.     if !y! gtr 255 set y=255
  9.     set line=%%a.%%b.!x!.0 %%a.%%b.!y!.255
  10.     if not defined _!line! (
  11.         echo,!line!
  12.         set _!line!=1
  13.     )
  14. ))>IPrangge+port.txt
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 17:07 , Processed in 0.020827 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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