PowerShell: чтение строк из текстового файла, создание имен исходного и конечного файлов, а затем копирование файлов - PullRequest
4 голосов
/ 14 декабря 2009

Я PowerShell новичок, и я бы хотел иметь возможность написать это. У меня есть текстовый файл, где каждая строка является частью имени файла без пути или расширения. Мне бы хотелось, чтобы строка в одну строку проходила по каждой строке файла (с gc - Get-Content , верно?), Берет содержимое строки, создает исходный путь (сетевой диск и расширение являются статическими), создает путь назначения, а затем копирует каждый файл. Содержимое моего файла выглядит так:

12345678
98765432
32145698
12365782

И моей исходной папкой является UNC путь, подобный следующему:

\\server\share

И моя папка назначения:

c:\temp\files

Я хотел бы сделать эквивалент этой команды DOS, используя $_ в качестве текста из каждой строки файла:

copy \\server\share\$_.ext c:\temp\files\$_.ext

Я почти уверен, что могу использовать gc и $_ для доступа к каждой строке файла, и что мне нужно использовать cp для копирования файлов, но у меня возникают проблемы при создании источника и имена файлов назначения.

Ответы [ 2 ]

5 голосов
/ 14 декабря 2009

Попробуйте следующее

gc theFileName | 
  %{ "{0}.ext" -f $_ } |
  %{ copy "\\server\share\$_" "c:\temp\files\$_" }

На самом деле это можно сделать в одну строку, но для этого ответа выглядит лучше в виде нескольких строк

4 голосов
/ 15 декабря 2009

Copy-Item может взять блок сценария непосредственно в этом случае, поэтому этапы Foreach-Object не нужны:

gc theFileName | cpi -l {"\\server\share\$_.exe"} c:\temp\files -whatif

Удалите параметр -WhatIf, как только вы убедитесь, что он работает.-L - это сокращение от -LiteralPath, которое помогает PowerShell определить, какой набор параметров используется.Также лучше использовать здесь буквальный путь, чтобы подстановочные символы не получали глобус (если вы этого не хотите - если это так, используйте -path).

По существу параметры, связанные с конвейером, могут быть заданы с помощью блоков сценариев, и PowerShell попытаетсяразрешите результат блока скрипта в тип, ожидаемый параметром привязки к конвейеру.

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