powershell Подсчет файлов в папке и создание текстового файла с результатом в имени файла - PullRequest
1 голос
/ 17 октября 2019

Если у меня есть 10 * .csv файлов в папке, я хотел бы создать out-файл как D: \ 10.txt. Я не могу получить правильный синтаксис, вот моя последняя попытка:

(Get-ChildItem 'D:\Data\' -File -Include *.csv).Count | Out-File -filepath "D:\test$($_).txt"

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

Может кто-нибудь помочь мне, пожалуйста? Большое спасибо!

Ответы [ 2 ]

2 голосов
/ 17 октября 2019

Автоматическая переменная $_, представляющая текущий входной объект на каждом шаге конвейера, может использоваться только в аргументах, которые блоки сценариев ({ ... }), но не в расширяемые строки ("...").

Блок сценариев для каждого объекта ввода чаще всего используется с командлетом ForEach-Object, но вы также можете использовать его как параметр блока скрипта задержки-привязки с параметрами конвейерной привязки .

Хотя это не работает с Out-File, оно работает с Set-Content, чтокак правило, правильный инструмент для использования с строками в любом случае:

(Get-ChildItem D:\Data -File -Filter *.csv).Count |
  Set-Content -LiteralPath { "D:\test$_.txt" }

Обратите внимание, что я заменил -Include на -Filter, что не только более эффективно, но итакже позволяет избежать ловушки
-Include, применяемой только к входному каталогу , а не к элементам внутри него - см. эту проблему GitHub .

Предупреждение : В Windows PowerShell - но, к счастью, больше не в PowerShell Core , где (без спецификации) UTF-8 теперь последовательно используется - Out-File и Set-Content по умолчанию используют разные кодировки символов: UTF-16LE ("Unicode") в сравнении с активной кодовой страницей ANSI системы ("По умолчанию")«);при необходимости используйте параметр
-Encoding, чтобы указать требуемую кодировку.

0 голосов
/ 17 октября 2019

Я пробую с этим

$files = Get-ChildItem 'D:\Data\*.csv'
$CountFile = $files.Count
touch "D:\$($CountFile).txt

Я пробовал с эмулятором powershell из Ubuntu, надеюсь, это поможет вам. Приветствие из Аргентины

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...