Actualmente estoy usando un archivo .exe llamado "vbadecompiler.exe" para procesar un grupo de archivos ".xlsm". Esos son muchos para procesar manualmente, por lo tanto, Powershell parece ser la respuesta. Mi intento actual es el siguiente:
dir *.xlsm | foreach-object {.\vbadecompiler.exe cmd/decompile /sXLfile:=$_ /sApplication:=Excel /sAppVersion:=Default /bOverBackup:=1 /bPreservDateTime:=0 /bLogActivity:=1 /sFilePassword:=""}
Pero solo se ejecuta a través del primer archivo, hay más de 100 archivos para procesar. No puedo encontrar cómo hacerlo pasar por todo. ¿Cómo deberia hacerse?
PD: Acabo de descubrir que hay una manera más simple de hacer esto usando VBA: https://stackoverflow.com/questions/17956651/execute-a-command-in-command-prompt-using-excel-vba
En el cmdlet foereach-object, $ _. representa el objeto Por eso está ahí.
—
A. Perez Cera
Solo necesita el punto si está accediendo a un miembro del objeto (por ejemplo
—
Rynant
$_.FullName
). Sin miembro, debería serlo $_
. En este caso, si el archivo era 'foo.xlsm', /sXLfile:=$_.
se interpretará como: /sXLfile:=foo.xlsm .
(tenga en cuenta el espacio y el punto después del nombre del archivo)
Eliminé el punto pero sigo teniendo el mismo problema; solo se ejecuta una vez. Supongo que debería crear varias instancias del .exe pero si no lo permite o no sé cómo.
—
A. Perez Cera
¿Has intentado esperar a que vuelva la ejecución? (start-process -wait iirc)
—
horatio
/sXLfile:=$_.
?