![]() |
中国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 |
|
| 第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 |