AutoHotKey на помощь! Ограничивать себя командной строкой Windows - это больно. Поскольку вы упомянули, что вы собираетесь сделать этот цикл в сочетании с AutoHotKey, почему бы просто не использовать AutoHotKey для всего этого?
Используйте StrLen и SubStr, чтобы извлечь переменную часть вашего пути к файлу. Файловый цикл будет проходить через все файлы, которые вы хотите. И тогда это просто вопрос использования RunWait для передачи сгенерированных вами путей в 7-Zip. « ,, Hide
указанное в конце RunWait
указывает скрыть созданные окна команд.
Вот пример сценария, который включает в себя возможность выбирать исходную и целевую папки через графический интерфейс:
InputBox, password, Enter Password for Archives, The generated archives will be protected with the password you enter below. Your input will be masked., hide
; Using FileSelectFolder is just one way of choosing your folders.
FileSelectFolder, sourcepath,,, Source Folder
sourcepath := RegExReplace(sourcepath, "\\$") ; Removes the trailing backslash, if present.
FileSelectFolder, destinationpath,,, Destination Folder
destinationpath := RegExReplace(destinationpath, "\\$") ; Removes the trailing backslash, if present.
; This is the meat of the answer:
sourcelen := StrLen(sourcepath) + 1 ; Determine the start of the variable part of the path.
Loop, Files, %sourcepath%\*.*, R ; Here's the replacement for your batch file loop.
{
varfilepath := SubStr(A_LoopFileFullPath, sourcelen) ; Grab everything to the right of the source folder.
RunWait, "c:\program files\7-zip\7z.exe" a "%destinationpath%%varfilepath%.7z" "%A_LoopFileFullPath%" -p"%password%" -t7z -mx0 -mhe -mmt,, Hide
FileCount := a_index
}
Msgbox Archives Created: %FileCount%`nSource: %sourcepath%`nDestination: %destinationpath%
Обратите внимание, что вам нужен v1.1.21+ AHK или выше, чтобы файловый цикл работал как написано.