Я пытаюсь создать сценарий, который будет ярлыком для создания некоторой структуры папок. В основном у меня есть шаблон .ahk-скрипта, который я адаптировал к своим потребностям, и простой .bat-скрипт, который создает папки, которые мне нужны.
Скрипт .ahk, вызывает скрипт .bat. Проблема заключается в том, что сценарий .ahk помещает местоположение сценария .bat в буфер обмена и должен вставить его в окно cmd, которое открывает .ahk, в каталог, в котором я выполняю ярлык. Однако функция вставки не работает. Терминал CMD показывает следующее:
F:\Documents\Scripts\Template Scripts\Reference Media>v
'v' is not recognized as an internal or external command, operable program or batch file.
Это мой скрипт .ahk:
SetTitleMatchMode RegEx
return
; Stuff to do when Windows Explorer is open
;
#IfWinActive ahk_class ExploreWClass|CabinetWClass
; create new text file
;
#t::Send !fwt
; open 'cmd' in the current directory
;
#c::
OpenCmdInCurrent()
return
#IfWinActive
; Opens the command shell 'cmd' in the directory browsed in Explorer.
; Note: expecting to be run when the active window is Explorer.
;
OpenCmdInCurrent()
{
; This is required to get the full path of the file from the address bar
WinGetText, full_path, A
; Split on newline (`n)
StringSplit, word_array, full_path, `n
; Find and take the element from the array that contains address
Loop, %word_array0%
{
IfInString, word_array%A_Index%, Address
{
full_path := word_array%A_Index%
break
}
}
; strip to bare address
full_path := RegExReplace(full_path, "^Address: ", "")
; Just in case - remove all carriage returns (`r)
StringReplace, full_path, full_path, `r, , all
IfInString full_path, \
{
Run, cmd /K cd /D "%full_path%"
WinWait, ahk_exe cmd.exe
ClipSaved := ClipboardAll ; save the entire clipboard to the variable ClipSaved
clipboard := "" ; empty the clipboard (start off empty to allow ClipWait to detect when the text has arrived)
clipboard = ( call "F:\Documents\Scripts\Template Scripts\CreateFolderTemplate.bat" ) ; copy this text:
ClipWait, 2 ; wait max. 2 seconds for the clipboard to contain data.
if (!ErrorLevel) ; If NOT ErrorLevel, ClipWait found data on the clipboard
;Sleep 250
Send ^v {Enter} ; paste the text
Sleep 300
clipboard := ClipSaved ; restore original clipboard
ClipSaved = ; Free the memory in case the clipboard was very large.
return
}
else
{
Run, cmd /K cd /D "C:\ "
}
}
И это скрипт .bat, который он вызывает:
@echo off
md Approvals
md "Behind The Scenes"
md "Client Notes"
md "Delivery/YYYY-DD-MM"
md "Other Media"
md "Personal Notes"
md "Project Files"/"Capture One"
md "Project Media (if applicable"
md "Production Media"
md "Reference Media"
cd "Production Media"
md "Media From Client"
md "Other Media"
Сложная часть скрипта .ahk: Send ^v {Enter}
Я не могу понять, почему он не вставляет его автоматически. Когда я нажимаю ctrl + v вручную, он вставляет строку и выполняет сценарий .bat, как и положено.
Я пытался сделать это с помощью Send {Ctrl down} {v} {Ctrl up} {enter}, он по-прежнему возвращает ту же строку в окне cmd.
Есть идеи для решения?
Спасибо.