Используйте powershell для циклического просмотра файлов в одной папке и создания текстовых файлов с использованием этих имен - PullRequest
0 голосов
/ 03 марта 2019

Я ищу скрипт для создания текстового файла для каждого файла в папке.Файл .txt должен использовать имя файла каждого файла в этой папке, но иметь расширение .txt вместо исходного расширения.

Мне нужно сделать это только в нескольких папках, поэтому я хотел бы открытьОкно PowerShell в этой папке и создайте там текстовые файлы (вместо того, чтобы указывать путь).

Я нашел этот бит близким, но он добавляет имя и расширение папки в результирующий файл .txt

Get-ChildItem -Path "C:\Temp" -Recurse | ForEach {
    [System.IO.File]::WriteAllText("C:\Temp" + $_.Name + ".txt", $_.FullName)
}

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

Если вы хотите обработать только текущую папку,

  1. удалите -Recurse
  2. , используйте -Path '.\*'
  3. , имейте в виду, что команда будетперезаписать все существующие .txt файлы
    , а также .txt файлы из других файлов с тем же BaseName.
    Для преодоления этого вы можете Group-Object файлы с тем же BaseName.

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

## Q:\Test\2019\03\03\SO_54968726.ps1
Function New-TextRef {
  Get-ChildItem -Path '.\*' -File |
    Where-Object Extension -Notin '.txt','.mkv','.avi','.mp4','.jpg','.png','.wav'|
      Group-Object BaseName | ForEach-Object{
        [System.IO.File]::WriteAllText(("{0}\{1}.txt" -f (Pwd).Path,$_.Name),($_.Group -join "`n"))
      }
}

Однако, если вы назовете файл сценария .ps1, вы также можете .dot получить его (загрузить в текущийсеанс).

После активации можно просто запустить функцию с именем New-TextRef в текущей папке и получить созданные файлы .txt.

Пример вывода:

> Get-ChildItem

    Directory: Q:\Test\2019\03\03

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2019-03-03     22:30            377 netsh_wlan_show_profiles
-a----       2019-03-04     00:31            343 SO_54968726.ps1
-a----       2019-03-03     23:02            328 SO_54972848.ps1
-a----       2019-03-03     22:32            216 SU_1410873.cmd
-a----       2019-03-03     22:47            216 test.xml
-a----       2019-03-03     23:02            194 testNew.xml


> . .\SO_54968726.ps1

> New-TextRef

> Get-ChildItem

    Directory: Q:\Test\2019\03\03

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2019-03-03     22:30            377 netsh_wlan_show_profiles
-a----       2019-03-04     00:36             43 netsh_wlan_show_profiles.txt
-a----       2019-03-04     00:31            343 SO_54968726.ps1
-a----       2019-03-04     00:36             34 SO_54968726.txt
-a----       2019-03-03     23:02            328 SO_54972848.ps1
-a----       2019-03-04     00:36             34 SO_54972848.txt
-a----       2019-03-03     22:32            216 SU_1410873.cmd
-a----       2019-03-04     00:36             33 SU_1410873.txt
-a----       2019-03-04     00:36             27 test.txt
-a----       2019-03-03     22:47            216 test.xml
-a----       2019-03-04     00:36             30 testNew.txt
-a----       2019-03-03     23:02            194 testNew.xml

> Select-String '^' *.txt

netsh_wlan_show_profiles.txt:1:Q:\Test\2019\03\03\netsh_wlan_show_profiles
SO_54968726.txt:1:Q:\Test\2019\03\03\SO_54968726.ps1
SO_54972848.txt:1:Q:\Test\2019\03\03\SO_54972848.ps1
SU_1410873.txt:1:Q:\Test\2019\03\03\SU_1410873.cmd
test.txt:1:Q:\Test\2019\03\03\test.xml
testNew.txt:1:Q:\Test\2019\03\03\testNew.xml
0 голосов
/ 03 марта 2019

Вы хотите отфильтровать каталоги и *.txt файлы:

Get-ChildItem -Path "C:\Temp" -Recurse -File |Where-Object {$_.Extension -ne '.txt'} |ForEach-Object {
    [System.IO.File]::WriteAllText("C:\Temp" + $_.BaseName + ".txt", $_.FullName)
}

Я также изменил $_.Name на $_.BaseName, чтобы получить имя файла без его расширения

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