我在文件夹中有多个文件,其文件名包含字母数字值。对于例如045_abcd.sql,34qqqq.sql,87asdf.sql等。我想比较这些文件名中的数字与存储在变量中的另一个数字,比如$× =37
,找出文件名中包含的数字大于该变量值的文件。因此,在此示例中,结果应该是045_abcd.sql
和87asdf.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文件
答案 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>
如果您需要任何进一步的帮助,请与我们联系。