我有一個基本檔案夾:
D:\St\Retail\AMS\AMS\FTP-FromClient\AMS
它包含各種日期檔案夾:
2022-04-01
2022-04-02
...
...
2022-02-02
2021-05-05
2019-04-12
這些檔案夾中的每一個都在檔案夾內包含自己的檔案。所以,我想檢索檔案夾內的所有檔案名(如果它有2022-04. 因此,如果檔案夾具有'2022-04'作為基本名稱,我需要檢索檔案夾內的所有檔案,如'2022-04-01','2022-04-02','2022-04-03'.我嘗試的方式是:
cls
$folerPath = 'D:\St\Retail\AMS\AMS\FTP-FromClient\AMS'
$files = Get-ChildItem $folerPath
[System.Collections.ArrayList]$data = @()
foreach ($f in $files) {
$a = Get-ChildItem $f.FullName
foreach ($inner in $a) {
echo $inner.FullName
$outfile = $inner.FullName -match '*2022-04*'
$datepart = $inner.FullName.split('\')[-1]
if ($outfile) {
$data.add($datepart '\' $inner.Name.Trim())
}
}
}
我的最終$data可能包含這樣的內容:
2022-04-01/abc.txt
2022-04-02/cde.pdf
2022-04-03/e.xls
uj5u.com熱心網友回復:
您可以通過首先收集要探索的目錄然后遍歷這些目錄以獲取其中的檔案來做到這一點。
使用計算屬性,您可以以您喜歡的任何格式輸出:
$folderPath = 'D:\St\Retail\AMS\AMS\FTP-FromClient\AMS'
$data = Get-ChildItem -Path $folderPath -Filter '2022-04*' -Directory | ForEach-Object {
$dir = $_.Name
(Get-ChildItem -Path $_.FullName -File |
Select-Object @{Name = 'FolderFile'; Expression = {'{0}\{1}' -f $dir, $_.Name}}).FolderFile
}
在此之后,$data 將是一個包含以下內容的字串陣列:
2022-04-01\abc.txt
2022-04-02\cde.pdf
2022-04-03\e.xls
uj5u.com熱心網友回復:
通過對目錄和檔案名使用通配符,您只需要一次Get-ChildItem呼叫:
$folderPath = 'D:\St\Retail\AMS\AMS\FTP-FromClient\AMS'
$folderDate = '2022-04'
[array] $data = Get-ChildItem "$folderPath/$folderDate*/*" -File | ForEach-Object{
# Join-Path's implicit output will be captured as an array in $data.
Join-Path $_.Directory.Name $_.Name
}
$data將是一個檔案路徑陣列,如下所示:
2022-04-01\abc.txt
2022-04-02\cde.pdf
2022-04-03\e.xls
筆記:
[array] $data確保變數始終包含一個陣列。否則,當只找到一個檔案時, PowerShell 將輸出一個字串值。這可能會導致問題,例如,當您想$data按索引進行迭代時,您將改為迭代單個字串的字符。- 為了使這個答案與平臺無關,我在呼叫中使用了正斜杠,
Get-ChildItem它在 Windows 和 *nix 平臺下都用作路徑分隔符。 Join-Path用于確保輸出路徑使用平臺的預期默認路徑分隔符(或/或\)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/467581.html
標籤:电源外壳
上一篇:如果提示為空,如何停止js腳本
