Opt("TrayIconDebug", True)
; String in filename to replace with an incremented integer.
$sTag = "++1"
; Show custom progress window (True|False).
$bEnableProgress = True
Switch $CMDLINE[0]
Case 0
Exit
Case 1
If $CMDLINE[1] = '/?' Then
; Help message.
_HelpMsg()
Exit
Else
; Assign default command line array.
$aFilenames = $CMDLINE
EndIf
Case 2
; If not $sTag in the 1st argument, then goto the next case.
If Not StringInStr($CMDLINE[1], $sTag) Then ContinueCase
; If the 2nd argument is not an integer, then goto the next case.
If Not StringIsInt($CMDLINE[2]) Then ContinueCase
; Create array with filenames starting from index 1.
Global $aFilenames[$CMDLINE[2] + 1]
$aFilenames[0] = Int($CMDLINE[2])
; Find first filepath that does not exist and set an offset.
$iOffset = 0
For $i1 = 1 To 1000
If Not FileExists(StringReplace($CMDLINE[1], $sTag, $i1, -1)) Then
$iOffset = $i1 - 1
ExitLoop
EndIf
Next
; Assign the array with filenames, replacing tag with an integer.
For $i1 = 1 To $aFilenames[0]
$aFilenames[$i1] = StringReplace($CMDLINE[1], $sTag, $i1 + $iOffset, -1)
Next
Case Else
; Assign default command line array.
$aFilenames = $CMDLINE
EndSwitch
If $bEnableProgress Then
ProgressOn(@ScriptName, 'SaveAs')
EndIf
For $i1 = 1 To $aFilenames[0]
; Filename to save as.
$sSaveAsFilename = $aFilenames[$i1]
; Print window.
$hPrint = WinWait("Print")
ControlClick($hPrint, "", "OK")
; Progress window.
$hProgress = WinWait("Printing")
; Save As window.
$hSaveAs = WinWait("Save Print Output As")
Do
Sleep(500)
ControlSetText($hSaveAs, "", "Edit1", $sSaveAsFilename)
Until ControlGetText($hSaveAs, "", "Edit1") = $sSaveAsFilename
Sleep(500)
If $bEnableProgress Then
ProgressSet(100 / $aFilenames[0] * $i1, $sSaveAsFilename)
EndIf
ControlClick($hSaveAs, "", "Button2")
AdlibRegister("_ConfirmSaveAs")
WinWaitClose($hSaveAs)
AdlibUnRegister("_ConfirmSaveAs")
; Wait for the progress window to close.
WinWaitClose($hProgress)
Next
If $bEnableProgress Then ProgressOff()
Exit
Func _ConfirmSaveAs()
; Handle possible msgbox to confirm overwrite.
If WinExists("Confirm Save As") Then
ControlClick("Confirm Save As", "", "&Yes")
EndIf
EndFunc
Func _HelpMsg()
; Help message.
MsgBox(0, @ScriptName, _
"Automates the standard print dialog from a web browser." & @CRLF & _
@CRLF & _
"Syntax:" & @CRLF & _
" " & @ScriptName & " filepath [filepath] ..." & @CRLF & _
" " & @ScriptName & " filepath integer" & @CRLF & _
@CRLF & _
"1st syntax can pass 1 or more filepath arguments." & @CRLF & _
@CRLF & _
"2nd syntax replaces the tag " & $sTag & " from right side of the " & _
"1st argument with an incremented integer (starting from 1). " & _
"Example: test" & $sTag & ".pdf will start with test1.pdf and end " & _
"with testN.pdf (which N is the integer set by the 2nd argument)." & @CRLF & _
@CRLF & _
"Tested with Firefox 63 on Windows 10.")
EndFunc
Имя файла | filepath может быть передано в качестве аргументов.Если вы хотите сохранить как 1 имя файла, тогда используйте:
scriptname.exe "C:\SaveFolder\a.pdf"
Вы также можете сделать много в том же исполнении, например:
scriptname.exe "C:\SaveFolder\a.pdf" "C:\SaveFolder\b.pdf" ...
Если вы хотите увеличить имена файлов с целым числом,то есть:
scriptname.exe "C:\SaveFolder\a++1.pdf" 3
, который ++1
будет заменен целым числом и будет обработан, как если бы это было:
scriptname.exe "C:\SaveFolder\a1.pdf" "C:\SaveFolder\a2.pdf" "C:\SaveFolder\a3.pdf"
1-й аргумент должен содержать строку ++1
и2-й аргумент должен быть целым числом, чтобы быть распознанным как базовое имя файла для увеличения.
Справка Msgbox может быть показана с использованием /?
в качестве единственного аргумента.
Много аргументов в одном и том жевыполнение может не подходить для управления в вашем скрипте Selenium, хотя это опция.
Эти окна являются стандартными диалоговыми окнами печати, поэтому разница между Chrome и Firefox может и не быть.Окно «Печать» не то же самое, если вы печатаете из, например, из «Блокнота», поэтому окно не может считаться стандартным.
Установите $sSaveAsFilename
в значение, которое будет установлено в элемент управления для редактирования «Имя файла:», в окне «Сохранить вывод на печать как».
Opt
Параметр TrayIconDebug
отобразит текущую строку в системном трее, в то время как курсор мыши находится над значком.Так что, если он остановится, вы можете отследить, попал ли он в ловушку.Это необязательный вызов функции.
Это было проверено на виртуальной машине Windows 10 с использованием Firefox 63. Окна отображаются медленно, поэтому на экране Edit1
проверяется правильность строки перед продолжением.В качестве альтернативы можно использовать Opt()
и параметр WinWaitDelay
со значением приблизительно 1000
, чтобы сделать паузу после отображения окна, хотя в среднем выполнение сценария может занять больше времени.
Я добавил функцию AdlibRegister
дляповторяющееся тестирование, и оно может все еще быть полезным, поскольку имя файла может бессознательно существовать, и его необходимо обработать.
Окно «Печать» в первую очередь ждут, просто чтобы остановить закрытие сценария до завершения процесса печати.Если это нежелательно, удалите соответствующий код.