我有一个批处理文件,可以创建另一个批处理文件
我需要在echo内部添加一个随机函数,使数字从1到6。
我的批次代码(完美运行)
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::: Batch Code :::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
@echo off
(for /f "usebackq delims=" %%a in ("D:\Program files\Openvpn\openvpn_configuration_list_for_clicks.csv") do (
echo :::: Start Of The Command Block ::::
echo/
echo MOVE /Y "D:\Program files\Openvpn\config_to_check\%%~NXa" "D:\Program files\Openvpn\config\"
echo START "" "C:\Program Files\OpenVPN\bin\openvpn-gui.exe" --connect %%~NXa
echo PING -n 30 localhost ^>NUL 2^>^&1
echo PING -n 5 www.wikipedia.org^|FIND /I "TTL"^>NUL
echo IF NOT "%%ERRORLEVEL%%"=="1" ^(
echo rundll32 user32.dll,MessageBeep 0x00000010L
echo start "" "D:\Program files\Firefox Esr\FirefoxPortable.exe"
echo TIMEOUT /T 60 /NOBREAK ^>NUL
echo goto search_%%a
echo ^)
echo :search_%%a
echo tasklist /FI "IMAGENAME eq firefox.exe" 2^>NUL ^| find /I /N "firefox.exe"^>NUL
echo if "%%ERRORLEVEL%%"=="0" ^(
echo TIMEOUT /T 60 /NOBREAK ^>NUL
echo goto search_%%a
echo ^)
echo if "%%ERRORLEVEL%%"=="1" ^(goto continue_%%a^)
echo :continue_%%a
echo taskkill.exe /F /IM openvpn.exe
echo taskkill.exe /F /IM openvpn-gui.exe
echo MOVE /Y "D:\Program files\Openvpn\config\%%~NXa" "D:\Program files\Openvpn\config_to_check\"
echo/
echo :::: End Of The Command Block ::::
echo/
echo/
echo/
)) > "D:\Program files\Openvpn\final.bat"
(echo exit) >> "D:\Program files\Openvpn\final.bat"
openvpn_configuration_list_for_clicks.csv(vpn列表)
vpn1.ovpn
vpn2.ovpn
vpn4.ovpn
vpn8.ovpn
输出final.bat没有随机功能(完美工作)
:::: Start Of The Command Block ::::
MOVE /Y "D:\Program Files\Openvpn\config_to_check\vpn1.ovpn" "D:\Program Files\Openvpn\config\"
START "" "C:\Program Files\OpenVPN\bin\openvpn-gui.exe" --connect vpn1.ovpn
PING -n 30 localhost >NUL 2>&1
PING -n 5 www.wikipedia.org|FIND /I "TTL">NUL
IF NOT "%ERRORLEVEL%"=="1" (
rundll32 user32.dll,MessageBeep 0x00000010L
start "" "D:\Program Files\Firefox Esr\FirefoxPortable.exe"
TIMEOUT /T 60 /NOBREAK >NUL
goto search_vpn1.ovpn
)
:search_vpn1.ovpn
tasklist /FI "IMAGENAME eq firefox.exe" 2>NUL | find /I /N "firefox.exe">NUL
if "%ERRORLEVEL%"=="0" (
TIMEOUT /T 60 /NOBREAK >NUL
goto search_vpn1.ovpn
)
if "%ERRORLEVEL%"=="1" (goto continue_vpn1.ovpn)
:continue_vpn1.ovpn
taskkill.exe /F /IM openvpn.exe
taskkill.exe /F /IM openvpn-gui.exe
MOVE /Y "D:\Program Files\Openvpn\config\vpn1.ovpn" "D:\Program Files\Openvpn\config_to_check\"
:::: End Of The Command Block ::::
我需要一个解决方案,在echo内部的路径中有一个从1到6的随机数
"D:\Program Files\Firefox Esr 2\FirefoxPortable.exe"
要么
"D:\Program Files\Firefox Esr 5\FirefoxPortable.exe"
要么
"D:\Program Files\Firefox Esr 6\FirefoxPortable.exe"
没有随机函数的代码工作得很好并正确生成输出,我需要在代码中插入一个随机函数,不会将输出生成错误。
随机函数需要为每个循环计算每个循环的新随机数
让我通过一些例子来介绍我的评论。
你的初始代码是不必要地逃避开括号,应该看起来更像这样:
Echo :::: Start Of The Command Block ::::
Echo/
Echo Ping -n 30 localhost ^>Nul 2^>^&1
Echo Ping -n 5 www.facebook.com^|Find /I "TTL"^>Nul
Echo If Not "%%ErrorLevel%%"=="1" (
Echo Rundll32 User32.dll,MessageBeep 0x00000010L
Echo Set /A num=(%%RANDOM%% %%%% 6^^^) + 1
Echo Start "" "D:\Program Files\Firefox Portable %%num%%\FirefoxPortable.exe"
Echo Timeout 60 /NoBreak ^>Nul
Echo ^)
Echo/
Echo :search
但是,您正在设置变量并尝试在同一个If
块中使用它,这可以通过多种方式修复:
Call
语句:
Echo :::: Start Of The Command Block ::::
Echo/
Echo Ping -n 30 localhost ^>Nul 2^>^&1
Echo Ping -n 5 www.facebook.com^|Find /I "TTL"^>Nul
Echo If Not "%%ErrorLevel%%"=="1" (
Echo Rundll32 User32.dll,MessageBeep 0x00000010L
Echo Set /A num=(%%RANDOM%% %%%% 6^^^) + 1
Echo Call Start "" "D:\Program Files\Firefox Portable %%%%num%%%%\FirefoxPortable.exe"
Echo Timeout 60 /NoBreak ^>Nul
Echo ^)
Echo/
Echo :search
Echo
ing的脚本中尚未启用延迟扩展)
Echo :::: Start Of The Command Block ::::
Echo/
Echo Ping -n 30 localhost ^>Nul 2^>^&1
Echo Ping -n 5 www.facebook.com^|Find /I "TTL"^>Nul
Echo If Not "%%ErrorLevel%%"=="1" (
Echo Rundll32 User32.dll,MessageBeep 0x00000010L
Echo Set /A num=(%%RANDOM%% %%%% 6^^^) + 1
Echo SetLocal EnableDelayedExpansion
Echo Start "" "D:\Program Files\Firefox Portable !num!\FirefoxPortable.exe"
Echo EndLocal
Echo Timeout 60 /NoBreak ^>Nul
Echo ^)
Echo/
Echo :search
Echo
ing的脚本中已启用延迟扩展)
Echo :::: Start Of The Command Block ::::
Echo/
Echo Ping -n 30 localhost ^>Nul 2^>^&1
Echo Ping -n 5 www.facebook.com^|Find /I "TTL"^>Nul
Echo If Not "%%ErrorLevel%%"=="1" (
Echo Rundll32 User32.dll,MessageBeep 0x00000010L
Echo Set /A num=(%%RANDOM%% %%%% 6^^^) + 1
Echo SetLocal EnableDelayedExpansion
Echo Start "" "D:\Program Files\Firefox Portable ^!num^!\FirefoxPortable.exe"
Echo EndLocal
Echo Timeout 60 /NoBreak ^>Nul
Echo ^)
Echo/
Echo :search
If
块(首选):
Echo :::: Start Of The Command Block ::::
Echo/
Echo Ping -n 30 localhost ^>Nul 2^>^&1
Echo Ping -n 5 www.facebook.com^|Find /I "TTL"^>Nul
Echo If "%%ErrorLevel%%"=="1" GoTo search
Echo Rundll32 User32.dll,MessageBeep 0x00000010L
Echo Set /A num=(%%RANDOM%% %%%% 6^) + 1
Echo Start "" "D:\Program Files\Firefox Portable %%num%%\FirefoxPortable.exe"
Echo Timeout 60 /NoBreak ^>Nul
Echo/
Echo :search
以上所有示例均假设显示的代码位于带括号的块内,类似于(code above)>"another.bat"
或>"another.cmd" (code above)
[编辑/]
这里有一些代码可以包含您现在发布的其他内容。我已经从上面使用了methd 4.
去除了不必要的If
块。它还应该包含您需要的随机化功能,该功能与之前发布的并与批处理文件兼容。
@Echo Off
(For /F "UseBackQ Delims=" %%A In (
"D:\Program Files\OpenVPN\openvpn_configuration_list_for_clicks.csv") Do (
Echo @Move /Y "D:\Program Files\OpenVPN\config_to_check\%%~nxA" "D:\Program Files\OpenVPN\config"
Echo @Start "" "C:\Program Files\OpenVPN\bin\OpenVPN-GUI.exe" --connect %%~nxA
Echo @Timeout 30 /NoBreak^>Nul 2^>^&1
Echo @Ping -n 5 www.wikipedia.org^|Find /I "TTL"^>Nul^|^|GoTo search_%%A
Echo @Rundll32 User32.dll,MessageBeep 0x00000010L
Echo @Set "num="
Echo @Set /A num=(%%RANDOM%% %%%% 6^) + 1
Echo @Start "" "D:\Program Files\Firefox ESR %%num%%\FirefoxPortable.exe"
Echo @Timeout 60 /NoBreak^>Nul
Echo/
Echo :search_%%A
Echo @TaskList^|Find /I "Firefox.exe"^>Nul^|^|GoTo continue_%%A
Echo @Timeout 60 /NoBreak^>Nul
Echo @GoTo search_%%A
Echo/
Echo :continue_%%A
Echo @TaskKill /F /IM OpenVPN.exe 2^>Nul
Echo @TaskKill /F /IM OpenVPN-GUI.exe 2^>Nul
Echo @Move /Y "D:\Program Files\OpenVPN\config\%%~nxA" "D:\Program Files\OpenVPN\config_to_check"
Echo/))>"final.bat"
Echo @Exit /B>>"D:\Program Files\OpenVPN\final.bat"