PowerShell проверяет, существует ли файл, и выводит родительский каталог - PullRequest
0 голосов
/ 08 ноября 2018

Я действительно надеюсь, что это имеет смысл. Сценарий будет более подробным, но из-за предоставленного фрагмента у меня возникла проблема.

Я ежедневно запускаю скрипт для поиска файлов предыдущего дня в определенной папке. Иногда папки есть и они пусты, и в этом случае они удаляются. Если папки существуют, проверьте их на наличие дополнительных файлов. Если файлы существуют, верните имя родительского каталога.

Папка 11 является постоянной и никогда не изменяется. Папки в пределах 11 создаются ежедневно с именами в формате ГГГГДДД (ДДД = юлианский день). Если папка YYYYDDD существует, проверьте ее на наличие папки, начинающейся с YYDDD. Если папка, начинающаяся с YYDDD, существует, проверьте ее на наличие файлов. Если какие-либо файлы существуют, верните имя родительского каталога, которое будет YYDDD.

Я знаю, что мой код в настоящее время возвращает полный путь, включая имя файла. Я хочу, чтобы он возвращал BaseName родительского каталога, в котором находятся файлы.

Существует дополнительный код, который можно игнорировать. Он предназначен для расширения, проверяя другие папки на наличие похожих файлов.

$date0 = (Get-Date).ToString("yy") + ((Get-Date).AddDays(-1).DayOfYear).ToString("D3")
$date1 = (Get-Date).ToString("yyyy") + ((Get-Date).AddDays(-1).DayOfYear).ToString("D3")

$path0 = "U:\PShell\Testing\Delete Julian Dates\Test\11\$date1"
$path1 = "U:\PShell\Testing\Delete Julian Dates\Test\12\$date1"
$path2 = "U:\PShell\Testing\Delete Julian Dates\Test\13\$date1"

$checkfiles = Get-ChildItem $path0\"$date0*"\*

if (Test-Path $path0\"$date0*"\*) {
    $checkfiles|
    % { Write-Host $_.FullName }
} else {
   Write-Host "Folder does not exist or is empty." }

Pause

1 Ответ

0 голосов
/ 08 ноября 2018

Используйте Split-Path -Parent, чтобы вернуть родительскую папку (полный путь) файла или папки.

Если вы просто хотите указать имя родительской папки, вы можете использовать Split-Path -Parent | Get-Item | Select-Object -ExpandProperty Name.

В качестве альтернативы вы можете использовать ($_.FullName.split("\"))[-2]. [-2] ссылается на второй по значимости элемент в массиве имен папок. [-1] будет относиться к имени файла. Может быть немного быстрее, в зависимости от того, сколько файлов вам нужно перебрать.

...