[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[网络连接] 求助,如何给写好的bat加有效期验证

想给写好的bat加个有效期远程验证,就是运行需要先验证是否在有效期内,在有效期内就继续运行,过期就提示过期不再继续执行。谁有好的方案,可付费。
利用txt文本截取字段和本地时间做比对这个方法试过了,但是容易出现问题。
不知还有没有其他的方法。

回复 1# sditwzh


    请把你的代码发出来并说明一下具体啥问题
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 2# Batcher


    没有代码,我是想找大神给写个,我写的那个利用txt那个不好用

TOP

回复 3# sditwzh


    想看一下你是怎么对比的,以及如何在此基础上进一步优化。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 sditwzh 于 2022-10-17 17:25 编辑

回复 4# Batcher


@echo off

@mode con lines=28 cols=60

echo.

echo 正在验证软件授权信息,请稍候!

ping 127.1 -n 2 >nul

echo.
rem 截取第x行内容
set line=1
set "url=http://10.214.195.222/date.txt"
(echo;var http=new ActiveXObject^('Msxml2.XMLHTTP'^);
echo;http.open^('GET', "%url%", false^);
echo;http.send^(^);
echo;WSH.echo^(http.ResponseText^);
)>"%tmp%\j.j"
for /f "tokens=1* delims=:" %%a in ('cscript -nologo -e:jscript "%tmp%\j.j"^|findstr /n .*') do (
    if %%a equ %line% set name=%%b
)

set "name=%name:~0,6%"
echo;授权单位:%name%

echo.
rem 截取第x行第n个字符之后内容
set line=1
set index=14
set "url=http://10.214.195.222/date.txt"
(echo;var http=new ActiveXObject^('Msxml2.XMLHTTP'^);
echo;http.open^('GET', "%url%", false^);
echo;http.send^(^);
echo;WSH.echo^(http.ResponseText^);
)>"%tmp%\j.j"
for /f "tokens=1* delims=:" %%a in ('cscript -nologo -e:jscript "%tmp%\j.j"^|findstr /n .*') do (
    if %%a equ %line% set serverdate=%%b
)
call set "serverdate=%%serverdate:~%index%%%"
>"%tmp%\v.v" echo;WSH.echo Year(date) ^& right("0" ^& Month(date),2) ^& right("0" ^& Day(date),2)
for /f %%a in ('cscript -nologo -e:vbscript "%tmp%\v.v"') do set localdate=%%a
if "%serverdate%" leq "%localdate%" (
echo;您的授权已过期。
echo.
echo 请您在授权期内使用&goto :end)

echo 您的授权在有效期内可以正常使用。

ping 127.1 -n 3 >nul

echo.

echo 正在启动

echo.

start  D:\dev_tool\nginx-1.9.9\nginx.exe

ping 127.1 -n 5 >nul
exit
:end
echo.
pause
exit


这个方法有时候出现第一次可以读取txt信息,但是后面就算把txt信息改了,再次运行还是能执行,无论怎么改读取到的信息都是第一次的,所以想看看又没有别的方式,或者建立一个mdb数据库从数据库读取。再或者有其他方法。还有能不能利用读取文件名称的方式来实现,例如123文件夹下有1个文件夹一个txt,文件夹名称是客户名称,txt文件名是对应的授权日期。这样再取这个txt文件名和电脑时间做对比。

TOP

回复 4# Batcher


    请大神看看给个好的解决方案。可以付费

TOP

  1. @echo off&&setlocal enabledelayedexpansion
  2. set qx=20221015
  3. wget --user-agent="Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.3) Gecko/2008092416 Firefox/3.0.3" --no-check-certificate -c -q -N -t 0 -O 1.yyy "www.bathome.net/thread-64050-1-1.html"
  4. for /f "tokens=2 delims= " %%i in ('findstr /i "GMT+8" 1.yyy') do set "rq=%%i"
  5. del /q *.yyy>nul 2>nul
  6. set rq=!rq:-=!
  7. if !rq! leq %qx% (goto bq) else (echo 程序使用到期,不再运行&&ping /n 5 127.1>nul&&exit)
  8. :bq
  9. echo 欢迎使用
  10. pause
复制代码
仅写了验证时间的部分,当设定期限QX后,如果当前日期小于等于期限是允许执行的。缺点,1依靠网络时间(本例采用本论坛时间)2需要外置程序 wget,根据系统是多少位,需要不同版本。
wget 地址 http://bcn.bathome.net/s/tool/index.html?key=wget
如果采用,希望你下功夫另找一个国家级省级这种会多年在线的带服务器时间的网页地址,替换本例中的地址。
目的,学习批处理

TOP

  1. @echo off&&setlocal enabledelayedexpansion
  2. del /q *a1.*
  3. set qx=20221017
  4. wget --user-agent="Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.3) Gecko/2008092416 Firefox/3.0.3" --no-check-certificate -c -q -N -t 0 -O a1.html "http://www.weather.com.cn/#404"
  5. findstr /i "utf" a1.html&&iconv -c -f utf-8 -t GBK a1.html>>gba1.html
  6. findstr /i "padding" gba1.html|findstr /i "%date:~0,4%">a1.txt
  7. cls
  8. for /f "tokens=1,2* delims=^< " %%i in (a1.txt) do (
  9. set "sj=%%i"
  10. set sj=!sj: =!
  11. set sj=!sj:年=!
  12. set sj=!sj:月=!
  13. set sj=!sj:日=!
  14. )
  15. del /q *a1.*>nul 2>nul
  16. if !rq! leq %qx% (goto bq) else (echo 程序使用到期,不再运行&&ping /n 5 127.1>nul&&exit)
  17. :bq
  18. echo 欢迎使用
  19. pause
复制代码
采用天气网的网页数据,因为要转码,又多采用了iconv程序http://bcn.bathome.net/s/tool/index.html?key=iconv
1

评分人数

目的,学习批处理

TOP

回复 8# hlzj88


    不过问题是给客户执行的bat是固定死的,我这边要能控制期限,我看了下你的代码,那是和网络时间进行比对,这个比对内容我没有办法控制,就这么说吧,目的是客户的bat是写好的,我这边可以通过修改一些东西来控制这个bat来使用。通过网络校对是必须的,但是我没有好的方案,只想到这个利用txt文本。

TOP

回复 9# sditwzh
我记得文件变量后面直接加_t是不是就是获取此文件的修改时间?再以此为基础判断是否授权过期?

TOP

回复 9# sditwzh


    如果客户也懂点BAT,那么他只需要修改你代码里面的一个if语句就能跳过验证了。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 11# Batcher


    我给客户的不是bat源文件,我是转换到exe格式的

TOP

本帖最后由 sditwzh 于 2022-10-17 17:22 编辑

回复 10# holley


    你的意思是利用文件修改时间和当前时间做对比?那也不行,我还有一段代码是用来读取名称呢,就是说先是读取名称,读取到后再去验证时间是否到期。

TOP

回复 9# sditwzh

按你的要求,你需要两个日期,1 你控制期限的日期,2不是客户电脑时间的日期。对于第一个日期,如果局域网可能好办点,在ftp,或你共享的文件夹里放txt供bat来下载获得时间。如果没这条件,可以在网络开博客利用一个固定网页来提供这两个时间。当然博客的该网页内容是要允许反复编辑的。我没玩过博客,不了解。总之,你需要一个可以提供时间的地址。第2个问题在上面选天气网已经考虑到长期需要的情况,已经可以解决。但是不是绝对可靠。
目的,学习批处理

TOP

回复 14# hlzj88


    我现在就是用的你说的这种读取txt里面的时间来控制,但是不稳定,你看我上面的描述,有时候你就算改了txt内容,bat显示的还是修改前的。不知道什么情况

TOP

返回列表