2013-12-17 2 views
31

Non riesco a ottenere uno script PowerShell per eseguire direttamente un file bat. Ad esempio, questo funziona sulla linea di comando:Modo più sicuro per eseguire il file BAT dallo script PowerShell

.\\my-app\my-fle.bat 

Quando aggiungo questo comando per uno script, emette:

The term '.\\my-app\my-file.bat' is not recognized as the 
name of a cmdlet, function, script file, or operable program. 
Check the spelling of the name, or if a path was included, 
verify that the path is correct and try again. 

Ho provato anche il seguente, con lo stesso risultato:

& .\\my-app\my-fle.bat 
& ".\\my-app\my-fle.bat" 
\my-app\my-fle.bat 
& \my-app\my-fle.bat 
& "\my-app\my-fle.bat" 

Nota: è necessario restituire il codice lastexit in quanto è necessario verificare il successo del batch.

risposta

10

Prova questo, la tua dot dot era un po 'spenta. Modifica, aggiungendo bit lastexitcode per OP.

$A = Start-Process -FilePath .\my-app\my-fle.bat -Wait -passthru;$a.ExitCode

aggiungere -WindowStyle Hidden per lotti invisibile.

+0

che ha funzionato. Questo restituirà anche lo stato di uscita in LastExitCode? – cmcginty

+0

per accedere a $ lastexitcode da start-process, dovrai assisnare il comando a una variabile e usare l'interruttore passthru, quindi leggere exitcode dalla variabile. –

20

Per eseguire il bat, e avere accesso all'ultimo codice di uscita, eseguirlo come:

& .\my-app\my-fle.bat 
+0

Funziona solo quando 'my-app' si trova nel percorso relativo o utilizzo la lettera di unità. Stavo cercando di evitare di legare lo script a un'unità specifica. – cmcginty

+1

@Casey Credo di aver frainteso. Quindi 'my-app' è una cartella alla radice di qualsiasi unità con cui stai lavorando? Se è così, '& \ my-app \ my-file.bat' funziona per me. Come stai chiamando lo script .ps1? – Rynant

53
cmd.exe /c '\my-app\my-file.bat'