Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否可以批量弹出“是/否”?_Javascript_Batch File_Hta - Fatal编程技术网

Javascript 是否可以批量弹出“是/否”?

Javascript 是否可以批量弹出“是/否”?,javascript,batch-file,hta,Javascript,Batch File,Hta,我偶然发现了一个创建弹出窗口的代码,您可以从中编辑文本,添加多行 mshta javascript:alert("Line 1\n Line 2");close(); 继续并启动命令提示符,然后在该行中输入。我猜\n意味着下一行,因为您可以添加/删除这些内容 我的问题是,有没有一种方法可以使用相同的弹出式方法,而不是一个按钮上写着“OK”,而是使用两个按钮,当你点击一个按钮时,你会“转到a”,当你点击另一个按钮时,你会“转到b” 我也不知道如何修改我在上面发布的其他弹出窗口,比如说将它从“HT

我偶然发现了一个创建弹出窗口的代码,您可以从中编辑文本,添加多行

mshta javascript:alert("Line 1\n Line 2");close();
继续并启动命令提示符,然后在该行中输入。我猜\n意味着下一行,因为您可以添加/删除这些内容

我的问题是,有没有一种方法可以使用相同的弹出式方法,而不是一个按钮上写着“OK”,而是使用两个按钮,当你点击一个按钮时,你会“转到a”,当你点击另一个按钮时,你会“转到b”

我也不知道如何修改我在上面发布的其他弹出窗口,比如说将它从“HTML应用程序”更改为其他标题,并将“OK”按钮重命名为其他名称。不管怎样,这都是无关紧要的,只是好奇心在起作用

编辑:在我最后的评论中,关于关闭脚本,我发现我可以抛出

;close();
在括号的末尾。但是如何将true/false设置为批处理脚本中的变量


EDIT:我认为autoit是一种更好的语言。投票表决结束。

好的,首先让我解释一下您的示例中发生了什么。输入时:

mshta javascript:alert("Line 1\n Line 2");close();
你实际上是在告诉你的电脑:

运行名为mshta.exe的程序,并将以下javascript作为参数传递给它

您可以使用任何程序执行此操作,例如,通过键入以下内容,尝试使用名为“banana.txt”的新文件打开记事本:

notepad banana
请注意,这两种情况实际上与批处理无关。在您的示例中,mshta.exe只是运行一些javascript来打开一个警报窗口,就像在我的示例中notepad.exe处理.txt文件的创建一样


好了,现在我们已经解决了这个问题,我们来回答你的实际问题:有没有一种方法可以批量编写一个脚本,打开一个弹出的确认窗口

对于你的问题,简单的答案是否定的。批处理在移动目录、打开文件/程序方面非常好(需要引用),仅此而已。如果您需要执行列表中未列出的任何操作,您应该使用不同的脚本语言

然而,尽管我无法强调这在多大程度上是对你问题的正确答案,但我认识到这不是一个非常令人满意的答案,因此我要说,如果你必须批量解决问题,我会做如下操作:

@echo off

echo code=Msgbox("I'm A Message Box!", vbYesNo, "I'm The Title!") > "%temp%\popupBox.vbs"
echo WScript.Quit code >> "%temp%\popupBox.vbs"
cscript /nologo "%temp%\popupBox.vbs"

if %errorlevel%==6 call :ok_tag
if %errorlevel%==7 call :cancel_tag
echo Done!
exit /b 1

:ok_tag
echo You pressed Yes!
exit /b

:cancel_tag
echo You pressed No!
exit /b
这段代码通过创建并运行临时vbscript文件(另一种脚本语言),其任务是为您显示确认窗口,然后使用该脚本中的退出代码确定单击了哪个按钮,基本上解决了您的问题


请再次注意,这比简单地用纯vbscript编写程序要长得多、复杂得多,但如果必须有.bat文件,那么就应该有.bat文件。

您的代码基本上是一个bookmarklet。如果您可以编写JavaScript代码,编写适当的HTML来显示自定义对话,并使其适合于一行,那么您可能会得到您想要的,但这将是一种复杂的方法。而且没有办法更改JavaScript警报的标题。它与批处理文件无关,它是一个HTA(html应用程序):您可以使用
confirm()
而不是
alert()
。如果用户单击
OK
,则返回
true
;如果用户单击
Cancel
或使用
X
关闭窗口,则返回
false
。虽然我猜这些值也需要在命令行参数中处理?也许你必须更改…@teemu,我现在意识到了。这段代码让我比我的更畏缩:根据我的观点,
cscript.exe
是更好的解决方案。将它与
popubox.vbs
一起使用是一个不错的选择。一个小建议是,
popubox.vbs
随批处理文件一起提供,而不是由批处理文件创建。我知道它不再是一个单文件解决方案,但是,读取和维护这两个文件要比强制使用单个批处理文件解决方案容易得多。
@echo off

    for /f "usebackq" %%f in (
        `mshta "javascript:new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).Write(new ActiveXObject('WScript.Shell').PopUp('Select one',0,'Title',36));close();"`
    ) do (
        if "%%f"=="6" (
            echo YES
        ) else if "%%f"=="7" (
            echo NO
        ) else (
            echo ????
        )
    )