AutoHotKey para o resgate! Limitar-se à linha de comando do Windows é doloroso. Já que você mencionou que pretende fazer esse loop junto com o AutoHotKey, por que não apenas usar o AutoHotKey para a coisa toda?
Use StrLen e SubStr para extrair a parte variável do caminho do arquivo. O loop de arquivo irá recorrer a todos os arquivos desejados. E então é só uma questão de usar o RunWait para passar os caminhos que você gerou para o 7-Zip. O ,, Hide
especificado no final do RunWait
diz para ocultar as janelas de comando geradas.
Veja um script de exemplo que inclui a capacidade de escolher pastas de origem e de destino por meio da GUI:
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-zipz.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%
Note que você precisa de v1.1.21 + de AHK ou acima para o loop de arquivo operar como escrito.