标题: [文本处理] [已解决]请问批处理如何对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”不知道如何写?请大家帮忙。- @echo off&setlocal enabledelayedexpansion
- set /p z=请输入加减量:
- for /f "delims=. tokens=1-3" %%a in ('type ip.txt') do (
- set /a x=%%c-z
- set /a y=%%c+z
- echo %%a.%%b.!x!.0 %%a.%%b.!y!.255>>tmp.txt
- )
- (for /f "delims=" %%i in (tmp.txt) do (
- if not defined "%%i" echo %%i&set ""%%i"=i"
- ))>IPrangge+port.txt
- del /q tmp.txt
- 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 - @echo off&setlocal enabledelayedexpansion
- set /p z=请输入加减量:
- for /f "delims=. tokens=1-3" %%a in ('type ip.txt') do (
- set /a x=%%c-z
- set /a y=%%c+z
- if !x! lss 0 set x=0
- if !y! gtr 255 set y=255
- echo %%a.%%b.!x!.0 %%a.%%b.!y!.255>>tmp.txt
- )
- (for /f "delims=" %%i in (tmp.txt) do (
- if not defined "%%i" echo %%i&set ""%%i"=i"
- ))>IPrangge+port.txt
- del /q tmp.txt
- exit
复制代码
作者: awk 时间: 2011-9-18 21:14
不必使用临时文件- @echo off
- setlocal enabledelayedexpansion
- set /p z=请输入加减量:
- (for /f "tokens=1-3 delims=." %%a in (a.txt) do (
- set /a x=%%c-z
- set /a y=%%c+z
- if !x! lss 0 set x=0
- if !y! gtr 255 set y=255
- set line=%%a.%%b.!x!.0 %%a.%%b.!y!.255
- if not defined _!line! (
- echo,!line!
- set _!line!=1
- )
- ))>IPrangge+port.txt
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |