语言:批量+一点JScript。
主要想法: JScript适用于一个程序,但不适用于另一个程序。
错误消息: Microsoft JScript编译错误:关闭了条件编译。
我的问题是我试图从我的pastebin中获取一些信息到批处理变量中。我希望我的代码检查并执行网站上的代码。我已经让代码独立工作,但是当我将它添加到主程序时,我得到Microsoft JScript compilation error: Conditional compilation is turned off
错误。如果我自己运行相同的脚本,它可以很好地工作,但是当我将它添加到主脚本时它会中断。
我很确定我添加的彩色文本脚本打破了它,但我不是100%肯定。 基本上,为什么网站数据代码本身可以工作,而不是其他任何东西。
我该如何解决这个问题?
[不工作] 菜单+彩色文字+网站信息
@echo off
color 0a
setlocal
call :initColorPrint
call :title
rem ---- Menu Stuff ----
:menu
call :title
echo.
echo (Type 'version' to see error)
echo.
call :colorPrint 09 "%time%"
call :colorPrint 06 "@"
call :colorPrint 0c "%username%"
set /p call=^>
if "%call%" =="version" goto :version
%call%
goto menu
:title
title CMD ^| User: %username%
exit /b
rem ---- This part doesn't work... ----
:version
@if (@a==@b) @end /*
@echo off
setlocal
call :stuff
timeout 1
echo.
echo %code%
set "code=%code%"
timeout 3
exit
:stuff
for /f "delims=" %%I in ('cscript /nologo /e:jscript "%~f0" "https://pastebin.com/raw/wAtBQEeZ"') do (
set "code=%%I"
echo(%%I
)
exit /b
JScript */
var x=new ActiveXObject("Microsoft.XMLHTTP");
x.open("GET",WSH.Arguments(0),true);
x.setRequestHeader('User-Agent','XMLHTTP/1.0');
x.send('');
while (x.readyState!=4) {WSH.Sleep(50)};
WSH.Echo(x.responseText);
rem ----- Color Stuff -----
:colorPrint Color Str [/n]
setlocal
set "str=%~2"
call :colorPrintVar %1 str %3
exit /b
:colorPrintVar Color StrVar [/n]
if not defined %~2 exit /b
setlocal enableDelayedExpansion
set "str=a%DEL%!%~2:\=a%DEL%\..\%DEL%%DEL%%DEL%!"
set "str=!str:/=a%DEL%/..\%DEL%%DEL%%DEL%!"
set "str=!str:"=\"!"
pushd "%temp%"
findstr /p /A:%1 "." "!str!\..\x" nul
if /i "%~3"=="/n" echo(
exit /b
:initColorPrint
for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do set "DEL=%%a"
<nul >"%temp%\x" set /p "=%DEL%%DEL%%DEL%%DEL%%DEL%%DEL%.%DEL%"
exit /b
:cleanupColorPrint
del "%temp%\x"
exit /b
图片:
[工作] 网站信息代码
@if (@a==@b) @end /*
@echo off
setlocal
call :stuff
timeout 1
echo.
echo %code%
set "code=%code%"
timeout 3
exit
:stuff
for /f "delims=" %%I in ('cscript /nologo /e:jscript "%~f0" "https://pastebin.com/raw/wAtBQEeZ"') do (
set "code=%%I"
echo(%%I
)
exit /b
JScript */
var x=new ActiveXObject("Microsoft.XMLHTTP");
x.open("GET",WSH.Arguments(0),true);
x.setRequestHeader('User-Agent','XMLHTTP/1.0');
x.send('');
while (x.readyState!=4) {WSH.Sleep(50)};
WSH.Echo(x.responseText);
工作图片:
答案 0 :(得分:2)
您正在尝试编写一个混合脚本,该脚本是cmd.exe批处理,另一部分是JScript(通过CSCRIPT执行)
您必须确保批处理永远不会尝试执行JScript代码,相反,JSCRIPT绝不能尝试执行批处理代码。
很容易防止批量通过EXIT / B看到JScript(和/或可能带有:标签的GOTO / CALL)。但是CSCRIPT引擎总是会尝试将整个脚本解析为JSCRIPT。
成功的混合脚本的诀窍是在一开始就有一个有效批处理和JScript的行。第一行不应该在批处理中执行任何操作,在JScript中,除了开始JScript多行注释之外,它什么都不做。所有批处理代码如下,然后以EXIT / B结束。然后,您有一行关闭JScript多行注释,然后是JScript代码。
您似乎试图将正在运行的混合脚本粘贴到另一个脚本中,而不了解其工作原理。您只需重新构建代码,以确保所有批处理代码都隐藏在JScript中(作为注释的一部分)
@if (@a==@b) @end /* This is a harmless hybrid batch/JScript line that begins a JScript comment.
@rem ================== Batch code ==========================
@echo off
color 0a
setlocal
call :initColorPrint
call :title
rem ---- Menu Stuff ----
:menu
call :title
echo.
echo (Type 'version' to see error)
echo.
call :colorPrint 09 "%time%"
call :colorPrint 06 "@"
call :colorPrint 0c "%username%"
set /p call=^>
if "%call%" =="version" goto :version
%call%
goto menu
:title
title CMD ^| User: %username%
exit /b
:version
@echo off
setlocal
call :stuff
timeout 1
echo.
echo %code%
set "code=%code%"
timeout 3
exit
:stuff
for /f "delims=" %%I in ('cscript /nologo /e:jscript "%~f0" "https://pastebin.com/raw/wAtBQEeZ"') do (
set "code=%%I"
echo(%%I
)
exit /b
rem ----- Color Stuff -----
:colorPrint Color Str [/n]
setlocal
set "str=%~2"
call :colorPrintVar %1 str %3
exit /b
:colorPrintVar Color StrVar [/n]
if not defined %~2 exit /b
setlocal enableDelayedExpansion
set "str=a%DEL%!%~2:\=a%DEL%\..\%DEL%%DEL%%DEL%!"
set "str=!str:/=a%DEL%/..\%DEL%%DEL%%DEL%!"
set "str=!str:"=\"!"
pushd "%temp%"
findstr /p /A:%1 "." "!str!\..\x" nul
if /i "%~3"=="/n" echo(
exit /b
:initColorPrint
for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do set "DEL=%%a"
<nul >"%temp%\x" set /p "=%DEL%%DEL%%DEL%%DEL%%DEL%%DEL%.%DEL%"
exit /b
:cleanupColorPrint
del "%temp%\x"
exit /b
====================== JScript Code ======================== */
var x=new ActiveXObject("Microsoft.XMLHTTP");
x.open("GET",WSH.Arguments(0),true);
x.setRequestHeader('User-Agent','XMLHTTP/1.0');
x.send('');
while (x.readyState!=4) {WSH.Sleep(50)};
WSH.Echo(x.responseText);
我没有在代码中查找其他问题。它可能会也可能不会起作用。但这应解决JScript编译错误。