get-childitem для подпапки - PullRequest
0 голосов

ОБНОВЛЕНО:

МОЯ ПОЛНАЯ ЗАДАЧА ПОЛУЧАЕТ ТЕКСТОВЫЕ ФАЙЛЫ (имена картинок * .jpg) ДЛЯ КАЖДОГО ПОДПИСАТЕЛЕЙ.THAN RENAME * .TXT ФАЙЛЫ НА ИМЯ СОДЕРЖАЩЕЙ ПАПКИ.

ПРИМЕР:

F: \ 189 \ recceive - эта папка (условно называемая "MAIN FOLDER")содержит скрипт F: \ 189 \ recceive \ FILELIST.PS1

. Эти SUB-директории содержат * .jpg файлы

  • F: \ 189 \ recceive \subfolder_1
  • F: \ 189 \ recceive \ subfolder_2

В результате выполнения скрипта мне нужно получить списки файлов

  • F: \ 189 \ получено \ subfolder1 \ subfolder_1.txt
  • F: \ 189 \ получено \ subfolder2 \ subfolder_2.txt

Моя идея решить эту задачу в 2 этапа.Во-первых, создайте txt-файлы списков файлов для каждой подпапки и присвойте им имя по умолчанию (например, pctrlst.txt). Вторая часть - переименуйте имя по умолчанию (pctrlst.txt) в имя каталога.


Я нуб - я знаю ... Если кто-то может задать мой довольно простой вопрос

$subfldr = Get-childitem -Name -Directory *_*
$pctrlst = Get-childitem -Name -Include *.jpg
$subfldr | ForEach-Object { $pctrlst | out-file pctrlst.txt } 

Почему скрипт возвращает результат только для родительского каталога?Я занимался серфингом на сайтах MS в течение 36 часов, но я не нашел ответа ... У меня есть идея, почему он не работает должным образом ... Потому что вывод первого командлета не стал вводом второй команды ... Как я могузаставить это работать правильно?

PS: Я действительно чувствую себя тупым ... Forest Dumb ... Focused Forest Dumb ...

Я буду счастлив, если вы поделитесь ссылкой на некоторые ссылки ...

1 Ответ

0 голосов
/ 09 октября 2018

Ваш вопрос не очень хорошо задан, трудно понять, что именно вы спрашиваете.Судя по всему, вы хотите получить список каталогов, содержащих один _ , а затем каждый файл .jpg внутри этих папок, добавляющий его в текстовый файл.Это довольно просто:

$folder = "C:\Users\user\Documents"

foreach ($subfolder in (Get-childitem -Directory $folder\*test*)) {
    Get-Childitem $subfolder -Name -filter *.csv | Out-file pctrlst.txt -append
}

В вашем коде есть несколько проблем:

$subfldr = Get-childitem -Name -Directory *_*

Использование здесь -Name возвращает только имя папки, а не полный путь.Если вы перейдете в этот каталог в PowerShell, это не будет проблемой, но этот флаг не нужен.

$pctrlst = Get-childitem -Name -Include *.jpg

-Include необходимо изменить на -Filter

$subfldr | ForEach-Object { $pctrlst | out-file pctrlst.txt } 

Здесь вы передаете имена папок (а не путь, а просто имя) в цикл объектов, где вы просто запускаете Out-File для той же переменной, которая содержит сколько угодно файлов jpg, которые находятся в текущемкаталог.Вы просто перезаписываете один и тот же файл одними и теми же данными несколько раз.

...