Скрипт PowerShell для переименования - Копировать - Переместить


2

Я пытаюсь написать сценарий PowerShell, чтобы сделать следующее.

шаг 1

Переименуйте файлы в исходных (FTP-папках) каталогах, указав их «current_name_datetime.csv» в соответствии с исходным файлом «Source_list.csv». В этом файле есть каталоги «source, destination».

шаг 2

Скопируйте только что переименованные файлы в каталоги резервных копий в соответствии с пунктом назначения в Source_list.csv. В этом файле есть каталоги «источник, пункт назначения», в который я хочу посмотреть этот сценарий.

шаг 3

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

--------------------- Мой сценарий ----------------------

$sdfiles = Get-Content c:\!tony\Source_list.csv
$sourceDir = "c:\test\"
$destinationDir = "c:\testing\"

Get-ChildItem $sourceDir -Recurse -Include $sdfiles "*.csv"|
    ForEach-Object{
           $newname= "{0}{1}_{2}.csv" -f $destinationDir, $_.BaseName,[datetime]::Now.ToString('MM-dd-yyyy-hh-mm-ss')
        $_|Copy-Item -Include ,$sfiles -Destination $newname -whatif }

-----------------------Ошибка--------------------------

What if: Performing operation "Copy Directory" on Target "Item: C:\test\cscenter Destination: C:\testing\cscenter_10-01-2015-12-22-24.csv".

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

Любая помощь будет высоко ценится.


Вы пытались написать на экране команду, которую пытаетесь выполнить вместо этого, чтобы попытаться выполнить ее? Это обычная техника отладки ... часто на этапе абстракции может случиться пропустить что-то, на что указывает приложение в реальном случае ... :)
Hastur

Да, я тоже попробовал, не повезло, я новичок в Power-Shell и нуждаюсь в помощи.
Tonyrcom

2
Это выглядит странно для меня -Include $sdfiles. Параметр -Include принимает шаблон файла, а не файл. Я думаю, что вы должны разбить ваш скрипт, чтобы использовать промежуточные переменные (например $csvFiles = Get-ChildItem $sourceDir -Recurse -Include $sdfiles "*.csv"). Затем выполните пошаговое выполнение сценария в PowerShell ISE и изучите содержимое промежуточных переменных, чтобы увидеть, содержат ли они то, что вы ожидаете. В основном вам нужно научиться отлаживать.
dangph

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

И описание шагов, и пример сценария неоднозначны - я не могу понять сверху, что именно вы собираетесь выполнить. Я думаю, что стоит предоставить более подробную информацию и условия, например. каждый файл в каталоге, /sourceвключая (исключая) подкаталоги, должен быть скопирован в каталог /destи переименован в соответствии с информацией в файле a.csv. файлы, не перечисленные в, a.csvдолжны (не) копироваться
маоизм
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.