2017-01-19 2 views
-5

У меня есть папка с тысячами файлов (скажем, .txt) с разными названиями: VBH_V001.txt VDD_V001.txt DTG_V001.txt ADC_V001.txt DFD_V001.txt и т.д. ....Создание папок и перемещение файлов в PowerShell

Мне нужно создать каталоги в этой папке с именем каждого файла, а затем переместить эти файлы в каталоги. Результатом может быть, например, папка с именем VBH (без _V001.txt), и в этой папке должен быть файл VBH_V001.txt. Как мне это сделать. Пожалуйста, порекомендуйте.

+0

Я никогда не использовал PowerShell, но должен использовать его для выполнения этой задачи. Так что не очень хорошо знакомы с синтаксисом. –

+1

SO - это не место, где мы делаем вашу работу за вас. Предполагается, что у вас есть хотя бы базовое понимание используемого вами языка, и вы сделали честную попытку самостоятельно решить проблему (покажите код, который у вас есть в данный момент, и объясните, что не работает должным образом). –

ответ

0

То, что вы в основном нужно сделать, это:

  1. Get a list of files in a selected folder через PowerShell.
  2. Создать новые папки in a loop using the New-Item cmdlet которые имеют имя, сделанное using substring of a name выбранного файла.
  3. Для каждого из файлов, переместите файл в новое место, using the Move-Item cmdlet.

Надежда, что помогает.

0
cd <path to your folder> 
    $files = Get-ChildItem -file; 
    ForEach ($file in $files) 
    { 
    $folder = New-Item -type directory -name $file.BaseName; 
    Move-Item $file.FullName $folder.FullName; 
    } 

Этот скрипт создает каталог для каждого файла и перемещает файл в этот каталог. Чтобы исключить _V001 от имени каталога, вы можете вызвать метод TrimEnd на $ file.BaseName -

$file.BaseName.TrimEnd ("_V001") 

Шаг за шагом.

  1. Прежде всего, перейдите в каталог, содержащий ваши файлы.
  2. Получить список объектов, представляющих ваши файлы, с помощью командлета Get-ChildItem с атрибутом -file. Эти объекты содержат свойства - такие как BaseName, FullName и т. Д.
  3. Сохраните этот список в переменной $ files.
  4. Прокрутите список через ForEach.
  5. В теле ForEach создайте каталог для каждого файла с помощью командлета New-Item. Атрибут -type указывает тип для нового элемента (каталог типа), для атрибута -name заменяет свойство $ file.BaseName. Свойство BaseName возвращает строку с именем файла без расширения и пути.
  6. Сохраните объект только что созданного каталога в переменной $ folder.

  7. Переместить файл с помощью командлета Move-Item. Этот командлет требует двух атрибутов: путь источника и путь назначения. В качестве исходного пути используйте свойство FullName для файлового объекта и свойство FullName объекта каталога для пути назначения. Свойство FullName возвращает имя файла или каталога, содержащего полный путь, например D: \ directory \ file.txt для файла и D: \ directory \ anotherDirectory для каталога.

Это не большое дело, и без ярлыков это выглядит как простой английский.

+0

, пожалуйста, добавьте дополнительные пояснения для вашего кода. –

+0

Готово. Конечно, все зависит от конкретного случая, но я думаю, вы поймете основную идею. – Dubprocessor

Смежные вопросы