PowerShell 检查文件是否存在

问题描述 投票:0回答:3

在 Windows 7 x64、PowerShell 3.0 上:
我有一个下载文件的目录,这是通过 .csv 文件完成的。

文件示例是:

008KS04.zip
008KS05.zip
008KS06.zip
008KS07.zip
008KS08.zip
008KS09.zip

我有一个 Csv,这是其中的一个示例:

Documentnummer,Versie,Status,Geocode,IDS datum,Documentgroep (Omsch),Documenttype (Wrd),Tekeningnummer
550164,I,AB,008,26.03.2016,Themalagen OI,KS,008KS09.zip
550163,D,AB,008,19.07.2013,Themalagen OI,KS,008KS08.zip
550162,D,AB,008,19.07.2013,Themalagen OI,KS,008KS07.zip
550161,C,AB,008,19.07.2013,Themalagen OI,KS,008KS06.zip
550160,D,AB,008,19.07.2013,Themalagen OI,KS,008KS05.zip
550159,E,AB,008,15.08.2014,Themalagen OI,KS,008KS04.zip

所以,假设文件位于 c: est\
和 C:\drawings.csv 中的 csv
我想要 csv 中缺少的文件,比如说 C:\missing.csv

起初我尝试在变量中绘制一张图:

$drawnr = '008KS09.zip'
$destcsv = "C:\missing.csv"
Set-Location C:\test
    If(Test-Path -Path ${drawnr}) {
       Write-Output "${drawnr}'.zip' exists"

  } Else {

    Write-Output "${drawnr}'.zip' doesnt exist"
    ${drawnr} | Export-Csv $destcsv -Append -NoTypeInformation

}

变量中存在现有和不存在图形时的输出<
这工作完美,请参阅图像,但使用 CSV 作为输入,我无法让它工作。

这是我到目前为止所拥有的:

$sourcecsv = 'C:\drawings.csv'
$destcsv = 'C:\missing.csv'
Set-Location 'C:\test\'

Import-Csv $sourcecsv | Select-object -Property Tekeningnummer | ForEach {

    Write-Output "${_} is the current object" #For Testing purpuse
If (Test-Path -Path ${_}) {

    Write-Output "${_} does exist"

  } Else {

    Write-Output "${_} doesnt exist"
    ${_} | Export-Csv $destcsv -Append -NoTypeInformation
    }
}

这告诉我所有文件都不存在,但所有文件都存在。
看图可以看到PowerShell的输出以及写入missing.csv的内容

所有文件均报告为不存在的输出图片

powershell csv
3个回答
0
投票

我不确定我是否明白你的意图,但看起来这可能有效。

$sourcecsv = 'C:\drawings.csv'
$destcsv = 'C:\missing.csv'
Set-Location 'C:\test\'

Import-Csv $sourcecsv | ForEach {

    Write-Output "${_} is the current object" #For Testing purpuse
    $TK = $_.Tekeningnummer
If (Test-Path -Path $TK) {

    Write-Output "$TK does exist"

  } Else {

    Write-Output "$TK doesnt exist"
    $_ | Export-Csv $destcsv -Append -NoTypeInformation
    }
}

0
投票

不确定

${_}
是否是我不知道的新语法,但我无法让它在我的 PS4 主机上工作,所以我在答案中将其更改为正常的
$_
。 除此之外,你只需要像@DaveSexton建议的那样做一个
ExpandProperty

Import-Csv $sourcecsv | Select-object -ExpandProperty Tekeningnummer | ForEach {

Write-Output "$($_) is the current object" #For Testing purpuse
If (Test-Path -Path $($_) {

  Write-Output "$($_) does exist"

} Else {

  Write-Output "$($_) doesnt exist"
  $_ | Export-Csv $destcsv -Append -NoTypeInformation
}
}

0
投票

就去做吧;)

$sourcecsv = 'C:\drawings.csv'
$destcsv = 'C:\missing.csv'
$dirtest='C:\test\'

Import-Csv $sourcecsv | where {-not (Test-Path "$dirtest$($_.Tekeningnummer)") } | export-csv $destcsv -NoTypeInformation
© www.soinside.com 2019 - 2024. All rights reserved.