Powershell для создания папок и подпапок из csv

csv powershell powershell-3.0

7029 просмотра

4 ответа

33 Репутация автора

Я пытаюсь подготовить скрипт, который будет создавать папки и подпапки из CSV.

Когда я создаю CSV с 1 столбцом «Имя», как это

Name
XYZ
ZXX
FFF

с помощью следующего скрипта я могу добиться создания папок

$folder = "D:\Test\"
$name = Import-Csv D:\Test\Test.csv
Foreach ($line in $name)
{
    New-Item -path $folder -Name $line.Name -Type Directory
}

Чего бы я хотел добиться, так это иметь CSV

Name;Letter 
XYZ;A
ZXX;B
FFF;B

Я хочу, чтобы скрипт создавал папку $ Folder \ Letter \ Name (итоговый путь - D: Test \ A \ XYZ; D: Test \ B \ ZXX; D: Test \ B \ FFF). Любой совет приветствуется.

Большое спасибо.

Автор: triskac Источник Размещён: 18.07.2016 08:01

Ответы (4)


0 плюса

22788 Репутация автора

Решение

Это должно дать вам желаемый результат

Import-Csv 'D:\Test\Test.csv' -Delimiter ';' |
    % { 
        $path = Join-Path $folder $_.Letter; 
        New-Item -Path $path -Name $_.Name -Type Directory 
    }
Автор: DAXaholic Размещён: 19.07.2016 08:15

1 плюс

33 Репутация автора

Я попытался немного улучшить сценарий. В CSV-файлах есть имя и буква, которые прекрасно работают со сценарием, предоставленным DAXaholic, но для этого потребуется добавить еще несколько подпапок в папку Name. Я попробовал это, но это не работает так, как мне нужно.

    $folder = "D:\Test\"
    $subfolders = "Volvo","Skoda","Tesla"
    $file = Import-Csv 'D:\Test\Test.csv' -Delimiter ';' 
    $file | 
     % { 
            $path = Join-Path $folder $_.Letter; 
            New-Item -Path $path -Name $_.Name -Type Directory 
    }

foreach ($subfolder in $subfolders) 
{
$file | 
%{
 $path2 = Join-Path $folder $_.Letter $_.Name;
 New-Item -Path $path2\$subfolder -Type Directory 
}
    }

То, чего я хотел бы достичь, это следующее. Сценарий должен проверить файл CSV, создать пользователя в файле CSV, поместить его в папку и создать 3 подпапки в папке имени. Например, D: \ Test \ A \ XYZ \ Volvo, Skoda, Tesla. Чего мне не хватает в сценарии? Спасибо

Автор: triskac Размещён: 19.07.2016 06:11

1 плюс

33 Репутация автора

если кому-то понадобится подобный скрипт, то вот решение

$folder = "D:\Test\"
$subfolders = "Volvo","Skoda","Tesla"
$file = Import-Csv 'D:\Test\Test.csv' -Delimiter ';' 
$file | 
 % { 
        $path = Join-Path $folder $_.Letter; 
        New-Item -Path $path -Name $_.Name -Type Directory 
}
foreach ($subfolder in $subfolders)
{ 
$file | %{
 $path2 = Join-Path $folder $_.Letter;
 $path3 = Join-Path $path2 $_.Name;
 New-Item -Path $path3\$subfolder -Type Directory 
   }
}
Автор: triskac Размещён: 19.07.2016 08:18

0 плюса

11 Репутация автора

Что я сделал, так это поместил нужный путь в мой файл CSV. Silmiar к вышеупомянутому обсуждению. FilePath может быть заменен на любой путь к файлу, к которому у вас есть доступ для чтения / записи из / в. «Folders.csv» - это имя файла CSV, который я использовал. Вы можете назвать этот CSV-файл как угодно, если только PowerShell может получить к нему доступ. И это то, что у компьютера нет проблем с именем файла. Большинство компьютеров скажут вам, если ему не нравится имя файла csv, которое вы используете. Если не PowerShell скажет вам.

Вот пример моего кода PowerShell:

$path = "FilePath"
$Name = import-csv -Path 'FilePath\Folders.csv'
foreach ($i in $Name) {
New-Item -Path $path -Name $i.Name -ItemType Directory
}

Мой CSV-файл имеет следующее: Имя; Тестирование \ A \ A.1; Тестирование \ B \ B.1; Тестирование \ C \ C.1; Тестирование \ D \ D.1

Примечание. В файле CSV это будет выглядеть примерно так:

  • имя
  • Тестирование \ А \ A.1
  • Тестирование \ B \ В.1
  • Тестирование \ C \ C.1
  • Тестирование \ D \ D.1

Я использовал маркированный формат, чтобы показать, что они находятся в одном столбце в файле CSV.

Автор: S. Bishop Размещён: 02.04.2018 08:41
Вопросы из категории :
32x32