Board logo

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

作者: super1129    时间: 2011-9-18 12:57     标题: [已解决]请问批处理如何对for语句里的变量进行判断赋值?

本帖最后由 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谢谢
作者: weichenxiehou    时间: 2011-9-18 13:17

回复 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
复制代码

作者: awk    时间: 2011-9-18 21:14

不必使用临时文件
  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
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2