标签 批处理 下的文章

Winrar压缩指定扩展名的文件且排除不需要的文件夹目录

for %%i in (jsp js html css png gif json xml) do (
     "C:\Program Files\WinRAR\Rar.exe" a  "backup.rar" -r  -x"C:\web\upLoadFile" -x"C:\web\pages"   "C:\web\webapp\*.%%i"
)

WinRAR并没有自带按扩展名压缩的功能,需要用到一点批处理的技巧。

需要压缩的格式放在in(....)里面, a命令表示append 后面跟压缩包名称,-x表示需要排除的目录。

批处理判断指定文件是否存在

@echo off
rem search specified file for debugging
set "FileName=tunps.com.tag"
for %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
if exist %%a:\nul (
rem for /f "delims=" %%b in ('dir /a-d /b "%%a:\%FileName%"') do (
for /f "delims=" %%b in ('dir /a-d /b "%%a:\*%FileName%" 2^>nul') do (
if /i "%%b" equ "%FileName%" (
Set "varFound=1"
)
)
)
)

if "%varFound%"=="1" goto FoundDebugTag else goto NotFoundDebugTag

:NotFoundDebugTag
"%programfiles(x86)%\app.exe"
goto Q

:FoundDebugTag
cmd.exe
goto Q

:Q

以上批处理判断所有文件根目录下是否存在文件tunps.com.tag文件,如果存在运行cmd.exe,如果不存在运行app.exe。

(PHP+批处理 )ADSL断线法投票刷票

20天的一个晚上,哥在上网。QQ弹出消息,初中同学叫我帮他同学投票,哥点开他给我的地址。差点没把我雷到哦,原来是选“爱心大使”,与其叫“爱心大使”,不如叫“赌博大使”。

(PHP+批处理 )ADSL断线法投票刷票

然后看了看投票的方式,原来使用ajax来请求一个地址来完成票数的增加,没有验证码,没有ip限制,F5刷起来相当的过瘾。然后开始装b了起来,给他说可以刷任意多票。我千不该啊万不该,不该把b装起来。后面的悲剧故事紧接着发生鸟。开始用php+curl写了一个几行的小脚本1分钟之内可以刷到1W票以上。然后就没有管它了。

结果过了几天同学又找到我了,说刷不起了,哥一看,我kao,肯定是做了ip限制,然后仔细的分析了一下网页。

点击“投票”后,onclick了一个GetIP() ,函数定义如下:

function GetIP(id)
{
var pass = '8966B88D690F10908063AB2B5B6AD911';
// var a = parseInt(Math.random()*100000000)%10;
// var b = '5';
// var c = a * b;
// var str=prompt("输入下列运算结果后才能投票成功:"+ a + " x "+ b + " = ??" );
// if(str == c)
// {
var IP = '125.86.0.107';
var now=new Date();
var url = "ip.aspx?id="+id+"&ip="+IP+"&pass=" +pass +"&time=" +now ;
xmlH.open("GET", url, true);
xmlH.onreadystatechange = nowOpenUpdate;
xmlH.send(null);
// }
// else
// {
// alert("输入运算结果不正确,请重新投票。")
// }
}

js中的pass变量和哥的Ip是唯一对应了,也就是服务器把ip通过某个函数转成了类似于md5的32位密钥。因为投票已经结束了,所以管理员已经把某些代码用//注释了起来。 点击投票后会弹出来一个随意的乘法算术题,答对了才get ip.aspx,否则弹出错误提示。 对于机器人来说,这个算术题有个毛用,完全是摆设。请求方法是get,页面是 ip.aspx?id="+id+"&ip="+IP+"&pass=" +pass +"&time=" +now。 参数有id,id是选手的id,ip就是客户端ip,pass就是刚才的pass变量,time类似于这种格式“Mon Sep 13 2010 17:49:04 GMT+0800”的时间。

最后根据这样的环境,哥写了如下php代码:

<?php
/*
获取adsl公网ip
tunpishuang at gmail dot com [tunps.com]
2010.08.23
*/
$ch=curl_init();
$option=array(
CURLOPT_URL=>'http://www.123cha.com/',
CURLOPT_RETURNTRANSFER=>true
);
curl_setopt_array($ch,$option);
$data=curl_exec($ch);
preg_match("/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/",$data, $matches);
$ip=$matches[0];
/*
获取pass变量的
*/
$ch=curl_init();
$option=array(
CURLOPT_URL=>'http://xx.com/tp.aspx',
CURLOPT_RETURNTRANSFER=>true
);
curl_setopt_array($ch,$option);
$data=curl_exec($ch);
preg_match("/([A-Z0-9]{32})/",$data, $matches);
$pass=$matches[0];
/*
发送投票数据包
*/
$ch = curl_init();
$options=array(
CURLOPT_TIMEOUT=>5,
CURLOPT_URL=>"http://xx.com/ip.aspx?id=5&ip=".$ip."&pass=".$pass."&time=Sun%20Aug%2022%202010%2023:01:49%20GMT+0800",
CURLOPT_RETURNTRANSFER=>true,
CURLOPT_POST=>false,
);
curl_setopt_array($ch,$options);
$data = curl_exec($ch);
print_r($options);
echo $data;
curl_close($ch);

将以上代码保存为vote.php。首先到123cha上面获得ip(垃圾长城宽带的adsl是非常诡异的),然后到tp.aspx获取pass变量,time不管它,因为没有它没有做验证。然后curl模拟刷票。但是我们的问题还没解决,因为每次运行这个php脚本,ip都是一样的。然后哥继续在上网搜寻通过adsl连续断线连线的方法。找到两个命令:rasdialrasphone,前面一个用来adsl连线,后一个用来断线。为啥rasdial不能断线呢,这个我也百思不得其解。反正我本地测试没有断线成功,所以用rasphone替代。将以下批处理代码保存为vote.bat

@echo off
set /p choise= 确认按回车(Enter)开始刷票
:loop
rasdial 宽带连接 adsl用户名 adsl密码
.\php.exe -c .\php.ini vote.php
rasphone -h "adsl"
;rasdial adsl /disconnect
ping -n 10 127.1>nul
goto loop

先连线,然后刷一票,然后断线,然后用ping休息10秒钟,继续重复这个过程。另外要让php运行正常需要通过php.ini来配置扩展。将以下代码保存为php.ini

[PHP]
extension_dir = "./"
extension=.\php_curl.dll

指定php的扩展路径和扩展。然后拷贝php安装目录下面的ext目录下面的php_curl.dll到vote.bat的同一个目录。这个时候php+批处理的刷票“程序”算是完成了,在已经安装了php的机子上可以正常运行,但是没有安装的php的环境,还需要拷贝php运行必须的dll库文件,最终包含的文件列表是:

libeay32.dll
php.exe
php.ini
php5ts.dll
php_curl.dll
ssleay32.dll
vote.bat
vote.php

最后我的总结是:最近和regular expression灰常的有缘非,公司网站js验证多次用到这个,看来有必须系统的学习一下鸟。

批处理分解数据库连接字符串

@echo off
rem tunpishuang[http://tunps.com]
rem 连接字符串格式:
rem provider password security "user id" "initial catalog" "data source"
rem provider server database uid pwd
rem 211条记录
setlocal enabledelayedexpansion
set num=1
for /f "usebackq" %%a in (`dir C:\Users\Administrator\Desktop\ConnectString4Web /s /b /a-d`) DO (
for /f "delims=; tokens=1,2,3,4,5,6" %%b in (%%a) DO (
for /f "delims== tokens=1,2,3,4,5,6,7,8,9,10,11,12" %%h in ("%%b=%%c=%%d=%%e=%%f=%%g") DO (
set /a num=!num!+1
rem echo [%%h %%i] [%%j %%k] [%%l %%m] [%%n %%o] [%%p %%q] [%%r %%s] !num!
if "%%n"=="UID" echo www.xxx.com %%o %%q >>conn.txt
if "%%n"=="User ID" echo www.xxx.com %%o %%k >>conn.txt
rem if "%%j"=="Password" echo %%k
rem if "%%p"=="PWD" echo %%q
rem echo !num!
)
)
)
endlocal

解释一下:

C:\Users\Administrator\Desktop\ConnectString4Web 目录下面有很多数据库连接字符串的文件,内容有两种:

一种是Provider=SQLOLEDB;Server=localhost;Database=xx;UID=xxxx;PWD=xxxxxx

还有一种是:Provider=SQLOLEDB.1;Password=xx;Persist Security Info=True;User ID=xx;Initial Catalog=xx;Data Source=(local)

如果通过批处理,将所需要的Server(Data source)、UID(user id)、PWD(password)提取到一个文件,格式为:

server1 uid1 pwd1
server2 uid2 pwd2
server3 uid3 pwd3

以上为题是发到cndos上面的一个帖子,但是没有鸟我,自己搞定。