0

我正在使用 invoke-sqlcmd 来 bcp 出一个文件。一切似乎都是鳍和花花公子,除非我在创建文件之前尝试删除它。然后在文件可用之前需要一个随机时间。任何想法为什么?

错误代码(当然,用您自己的值替换 $dir 和 $sql_srv)

$dir = "\\srv-ocmr\d$\temp\" 
$sql_srv = "srv-ocmr\rec1ocm" 
if (test-path $($dir+"*.dat")) {remove-item $($dir+"*.dat") } # culprit line 
$str = $("bcp sysobjects out " + $dir + "so.dat -S" + $sql_srv + " -T -N " ) 
invoke-sqlcmd -ServerInstance $sql_srv  -Query "exec xp_cmdshell '$str' " -Database    master -Verbose 
while (-not (test-path $($dir+"*.dat"))) { 
    sleep -Seconds 1 
    test-path $($dir+"*.dat")
    } 

删除罪魁祸首,瞧,一切都像魅力一样:

$dir = "\\srv-ocmr\d$\temp\" 
$sql_srv = "srv-ocmr\rec1ocm" 
$str = $("bcp sysobjects out " + $dir + "so.dat -S" + $sql_srv + " -T -N " ) 
invoke-sqlcmd -ServerInstance $sql_srv  -Query "exec xp_cmdshell '$str' " -Database    master -Verbose 
while (-not (test-path $($dir+"*.dat"))) { 
    sleep -Seconds 1 
    test-path $($dir+"*.dat")
    } 

用 cmd /c del 替换 remove-item 不会改变任何东西,与使用本地目录而不是 UNC 相同。

4

1 回答 1

0

你有没有尝试过:

Get-ChildItem -Path:$dir -Filter:'*.dat' | Remove-item -Force

我怀疑Test-Path和通配符发生了奇怪的事情。使用我发布的命令,它将使用管道。如果 get-childitem 没有找到文件,remove-item 只会默默地什么都不做。如果找到文件,Remove-Item 将尝试以极端偏见删除它们。

于 2013-07-15T00:26:34.043 回答