2014-02-12 201 views
1

我有一个非常好的部署方法。Powershell批处理文件在目录中执行.ps1文件

我目前使用powershell执行.sql文件,并将结果写入日志文件。目前批处理文件.ps1文件和.sql文件都在同一个目录中。

我想有执行建设01 .ps1和一个批处理文件时生成01 .ps1完成它执行建设02 .ps1

有时候,我有20个建立文件夹来部署和我试图避免到双击20 .bat文件。

我是新来的PowerShell - 我很抱歉,如果这不明确请问。谢谢。

回答

1

试试这个:

Get-ChildItem -Recurse -include "*.ps1" | % { & $_ } 

要了解它是如何工作的,你可以分解这一行到:

$allScripts = Get-ChildItem -Recurse -include "*.ps1" #Get all ps1 file under the current directory 
foreach($script in $allScripts){ 
    & $script # run the script 
} 

一个侧面说明,当前目录则是运行命令的目录。这是不是脚本目录本身(如果你从脚本运行命令)

+0

每个批处理文件包含此: CD/d%〜DP0 powershell.exe -File sp_script.ps1 pause 我只是把Get-ChildItem -Recurse -include“* .ps1”| .bat文件中的%{&$ _} ?我真的很抱歉。 – user3302439

+0

我写的使批处理文件无用。这个powershell脚本将调用所有ps1文件。 –

+0

如果要指定一个目录,请使用Get-ChildItem $ path -Recurse -include“* .ps1” – David

0

或者,如果你严格想要一个批处理文件,而不是一个脚本,你可以这样做:

Start "" /wait "powershell.exe . .\build01.ps1" 
Start "" /wait "powershell.exe . .\build02.ps1" 
Start "" /wait "powershell.exe . .\build03.ps1" 
Start "" /wait "powershell.exe . .\build04.ps1" 

为了澄清,我指的是将批处理文件作为以.BAT.CMD扩展名结尾的文件。上面应该按顺序运行.PS1脚本,在启动下一个脚本之前等待每个脚本完成。如果您希望呼吁自己的每一个批处理文件从一个额外的批处理文件,你可以使用CALL命令,如:

CALL Batch01.bat 
CALL Batch02.bat 
CALL Batch03.bat 
+0

cd/d%〜dp0 powershell.exe -File sp_script.ps1 pause – user3302439