中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-10-02 13:48
共 47,813 主题排行 / 349,918 发帖 / 今日 0 篇 / 48,279 会员排行
DOS批处理 & 脚本技术(批处理室) » [讨论]批处理结合sql
可打印版本  1,226 / 5
第1楼 coldface 发表于 2010-09-05 02:32
初级用户 发帖 70 积分 71
[讨论]批处理结合sql
需求如下:
ipmask数据库中保存了一些省份和ip的信息,想通过批处理查询sql,并按照搜索的预定信息输出到特定文件中,ISPID保存了ISP以及对应的ID,ProvinceID包含了省份和对应的ID。
ISPID文件内容:
DIANXIN 2
TIETONG 3

ProvinceID.txt文件内容:
anhui 1
beijing 2
我想实现比如说执行一次对安徽电信的查询(即SELECT where isp=2 and province=1),把结果输出到以anhui_dianxin命名文件下。注意文件中拼音与数字的对应关系。每执行一次就把结果输出到对应的命名文件下
如下是我写的一个查询,但是查询下来不是按照预想的输出的,那个select语句在for中执行写入到文件的内容都一样,如何解决这个问题?
谢谢!
@echo off&setlocal ENABLEDELAYEDEXPANSION
for /f "tokens=1 delims= " %%j in (ISPID.txt) do (
for /f "tokens=1 delims= " %%k in (ProvinceID.txt) do (
echo.>acl_%%j_%%k_1.txt

for /f "tokens=2 delims= " %%a in (ISPID.txt) do (
for /f "tokens=2 delims= " %%b in (ProvinceID.txt) do (
sqlcmd -U XX -P XX -d ipmask -Q "SELECT [net],[net mask] FROM [ipmask].[dbo].[result] where isp=%%a and province=%%b" -o acl_%%j_%%k_1.txt
)
)
)
)
第2楼 lxmxn 发表于 2010-09-05 14:41
版主 发帖 4,938 积分 11,386
可以写个函数来获取ID对应的ISP或者省份。

D:\clark>type get_ISP.bat
@echo off
for /f "tokens=1,2" %%i in (ISPID.TXT) do (
if /i "%%j" == "%~1" echo %%i
)
D:\clark>type ISPID.txt
DIANXIN 2
TIETONG 3
D:\clark>get_ISP.bat 3
TIETONG
第3楼 coldface 发表于 2010-09-05 14:59
初级用户 发帖 70 积分 71
哦?呵呵 谢谢,我去试试。
还可以这样的呀,呵呵
第4楼 coldface 发表于 2010-09-05 15:08
初级用户 发帖 70 积分 71
其实主要的疑点是查询上,怎么对应查询,比如读取ISPID 1,然后select 其它的省ID,然后写入到文件,版主你发的那个可以解决对应文件的写入,但是对查询那块不能实现啊。主要是for嵌套的问题
第5楼 lxmxn 发表于 2010-09-05 15:34
版主 发帖 4,938 积分 11,386
从你写的脚本内容来看,大体可以知道,你有两点没弄明白

1、“setlocal ENABLEDELAYEDEXPANSION”,在什么情况下才需要用?本例中并不需要这个。

2、for中的变量可以迭代,若指定第一个变量为%%a,那么可以在for后续的循环体中用%%b代表第二个变量,%%c代表第三个,依此类推。

建议把for循环的帖子好好看看,弄懂为止
可能你完全弄懂需要花费3个小时的时间,但总比你求助一次要花半小时,以后遇到10次for循环的问题要好,因为弄懂之后,不会为再次出现相同的问题而浪费时间。

第6楼 coldface 发表于 2010-09-05 18:17
初级用户 发帖 70 积分 71
对对,谢谢。我那会想出来了,这个%%b就是类似于C语言下的a++。
谢谢!
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023