多个文件的批处理文件和 CHOICE 命令

Batch file and CHOICE command for multiple files

有一个 Windows 程序可以从上下文菜单中擦除文件和文件夹,即使根本没有确认,然后我创建了一个包含以下内容的批处理文件

@ECHO OFF
CHOICE /M "Do you want to Wipe Files"
IF ERRORLEVEL 2 GOTO QUIT
IF ERRORLEVEL 1 GOTO RUN
:RUN
START "" "C:\Program Files\MyProgram\myexec.exe" /wipe "%~1"
EXIT
:QUIT
EXIT

和具有以下条目的注册表项

[HKEY_CLASSES_ROOT\*\shell\wipefiles\command]
@="\"C:\Program Files\MyProgram\myexec-start.cmd\" \"%1\""

只是为了在擦除文件或文件夹之前获得安全机会,它确实有效。

但是,如果选择了多个文件,那么它会提示您回答 YN 的次数,只要文件的数量是多少,而且 cmd window 保持打开状态直到您点击 YN 次为止,所选文件的数量是多少。

有没有办法不管选中文件的数量,只回答一次YN(关闭cmd屏幕)?

似乎没有简单的方法来执行您从上下文菜单中请求的操作,因为为每个选定的文件打开了一个单独的进程。 但它可以从发送到菜单轻松完成: 在 SendTo 文件夹中为您的脚本创建一个快捷方式,现在您可以发送任意数量的文件或文件夹。 脚本内容如下:

@ECHO OFF
CHOICE / M "Do you want to Wipe Files"
IF ERRORLEVEL 2 GOTO QUIT

:: If your software enables file processing in a chain, such as myexec.exe /wipe filename1 filename2 ..., use this syntax:
START "" "C:\Program Files\MyProgram\myexec.exe" /wipe %*
:: If not, use the for loop:
for %%f in (%*) do START "" "C:\Program Files\MyProgram\myexec.exe" /wipe %%f

: QUIT

也许有点偏离主题,但是你可以在 VBScript 中这样做:

Set Shell = CreateObject("WScript.Shell")
if MsgBox("Do you want to Wipe Files?", vbQuestion + vbYesNo, "wipefiles") = vbYes then
  for each Arg in WScript.Arguments
    Shell.Run """C:\Program Files\MyProgram\myexec.exe"" /wipe " & """" & Arg & """",0,True
  Next
end if

它将显示一个图形消息框,要求用户确认删除,无需任何终端window。