如何在powershell

时间:2017-01-10 20:19:17

标签: powershell

我在文件夹中有多个文件,其文件名包含字母数字值。对于例如045_abcd.sql,34qqqq.sql,87asdf.sql等。我想比较这些文件名中的数字与存储在变量中的另一个数字,比如$× =37,找出文件名中包含的数字大于该变量值的文件。因此,在此示例中,结果应该是045_abcd.sql87asdf.sql,基本上它应该将37与所有文件名进行比较,并将结果存储在另一个变量中。然后使用invoke sql cmd执行这些文件。感谢您的帮助。

以上是我在上面的例子中所做的事情:

$× =37

$y = Get-ChildItem -Path $PATH | Where-Object { ((! $_.PSIsContainer))} | Rename-Item -NewName { $_.Name -replace '\D+' }

$z = Get-ChildItem -Path $path | Where-Object {$_.Name -gt $x}

因此第二个命令将通过删除所有非数字字符重命名所有文件,包括扩展名(.sql),因此输出为:

34
45
87

然后第三个命令给我大于$ x = 37的值,即

45
87

我需要的是与$ x比较后的整个文件名,所以我可以使用Invoke sql cmd执行.sql文件

1 个答案:

答案 0 :(得分:1)

你现在需要做的就是

$FileNames = @()
foreach ($number in $z) {
    $FileNames += Get-ChildItem -Path $path | Where-Object {$_.Name -contains $number}
}
foreach ($FileName in $FileNames) {
    Invoke-Sqlcmd -InputFile "C:\MyFolder\$($FileName)" | Out-File -filePath "C:\MyFolder\$($FileName).rpt"
}

我在手机上这样做,所以我为任何错误道歉,您可能还需要稍微调整脚本以删除您将获得的.sql.rpt作为Invoke-Sqlcmd cmdlet的输出格式< / p>

如果您需要任何进一步的帮助,请与我们联系。