Как создать несколько папок и называть их, читая строки из текстового файла?

У меня есть текстовый файл с именем Export.txt. Он содержит список географических мест, предшествующих 3-значному числу с ведущими нулями.

пример

--START OF FILE-- 001 Aberdeen 002 Bellevue 003 Camas 004 Davenport 005 Edgewood 006 Ferndale 007 George 008 Harrington 009 Ilwaco 010 Kahlotus --END OF FILE-- 

Как написать сценарий или пакетный файл, который будет читать каждую строку из файла и создать папку с этим именем в определенном месте раздела NTFS?

Заметка! Обратите внимание, что имена папок должны содержать цифры. Подумайте о списке выше, как о фактическом списке папок.

Обновить! Мой фактический список создаваемых папок – 245, от 001 до 245. Вот первые несколько строк.

 --START OF FILE-- 001 Harberget 002 Långflon 003 Källegrafsrös 004 Badstuknappen 005 Aspberget 006 Knipen 007 Halsjön 008 N Finnskoga 009 Båtstad 010 Tisjön . . . . 245 Milskär --END OF FILE-- 

Полный список можно найти здесь: http://pastebin.com/SNde4bBN

Сценарий PS, предоставленный Мартином, плохо работает с такими символами, как Å, Ä и …. Он создает только 116 папок из общего числа 245, найденных в текстовом файле. Он пропускает каждую строку, содержащую либо один из этих символов. Таким образом, он пропускает 002 Långflon и 003 Källegrafsrös например, но создает 001 Harberget 004 Badstuknappen и 004 Badstuknappen .

Вот сценарий Powershell, который делает то, что вы хотите.

 $folder="X:\Test"; # Directory to place the new folders in. $txtFile="X:\Test\Export.txt"; # File with list of new folder-names $pattern="\d+.+"; # Pattern that lines must match get-content $txtFile | %{ if($_ -match $pattern) { mkdir "$folder\$_"; } } 

Это будет содержать цифры в названии.

Чтобы запустить скрипт, выполните следующие действия.

  1. Запустите Powershell в качестве администратора.
  2. Введите Set-ExecutionPolicy RemoteSigned и нажмите Enter, чтобы включить запуск скриптов. При появлении запроса нажмите Y.
  3. Закрыть Powershell.
  4. Скопируйте и вставьте сценарий выше в «Блокнот» или «Блокнот ++».
  5. Замените X:\Test на абсолютный путь к тому месту, где вы хотите создать новые папки.
  6. Замените X:\Test\Export.txt с абсолютным путем к текстовому файлу, который содержит имена, которые вы хотите использовать для этих папок.
  7. Замените \d+.+ Рисунком, который должны совпасть. \d+ соответствует любому числу .+ Соответствует любому символу.
  8. Сохраните его как «FileName.ps1» или любое другое имя, которое вы хотите. Просто следите за расширением .ps1 .
  9. Откройте проводник Windows и перейдите в место, где вы сохранили файл ps1. Щелкните правой кнопкой мыши на нем и выберите «Run with Powershell».

Скриншоты …

б с d

Гибкое решение Batch / VBS

Протестировано с Windows XP SP3, Vista SP2 и Windows 7 SP1. Это специально созданный пакетный скрипт со встроенным скриптом VB, который выполняет фактическую работу. Таким образом вы получаете скрипт, который должен быть совместим с любой операционной системой, выпущенной после XP SP2. Главный кредит принадлежит jeb и dbenham, которые придумывают (и уточняют) гибридную технику, используемую здесь.

 REM^ &@echo off>nul REM^ &if "%~2" == "" exit /b 2 REM^ &pushd "%~2" REM^ &cscript //e:vbscript //nologo "%~f0" "%~1" REM^ &popd REM^ &exit /b Dim stream, text, lines, fso Set stream = CreateObject("ADODB.Stream") stream.Open stream.Type = 2 stream.Charset = "utf-8" stream.LoadFromFile Wscript.Arguments(0) text = stream.ReadText stream.Close lines = Split(text, vbCrLf) Set fso = CreateObject("Scripting.FileSystemObject") For i = 0 To UBound(lines) fso.CreateFolder(lines(i)) Next 

инструкции

  1. Скопируйте и вставьте скрипт в блокнот или любой другой текстовый редактор (например, Notepad ++).

  2. Сохраните его как CreateFolders.cmd или любое CreateFolders.cmd имя, которое вы хотите. Просто следите за расширением .cmd .

  3. Откройте командную строку и перейдите в папку, в которой вы сохранили файл:

     cd /d "X:\Folder\containing\CreateFolders.cmd" 
  4. Запустите пакетный скрипт, указав файл списка и папку назначения в качестве первого и второго параметров соответственно:

     CreateFolders.cmd "X:\Some\folder\Export.txt" "X:\Destination\folder" 

Скриншоты

б с

Рекомендации

  • Справочник по командной строке
  • Можно ли встраивать и выполнять VBScript в пакетном файле без использования временного файла?
  • Объект Stream (ADO)

Решение PowerShell

Следующий сценарий PowerShell реплицирует решение выше. Он принимает два параметра, первый из которых является файлом списка (который считается сохраненным как UTF-8), а второй является папкой назначения. Протестировано с Windows XP SP3, Vista SP2 и Windows 7 SP1.

Примечание. Windows PowerShell 2.0 поставляется вместе с Windows 7, но его необходимо установить вручную в XP / Vista. Что касается Windows XP, вам необходимо установить .NET Framework 2.0 SP1 / SP2 или .NET Framework 3.5 с пакетом обновления 1 (SP1), включая .NET Framework 2.0 SP2. Windows 8 и Windows 8.1 включают PowerShell 3.0 и 4.0 соответственно.

 if ($args.Count -gt 1) { $file=$args[0]; $dest=$args[1]; Get-Content $file -Encoding UTF8 | %{ md "$dest\$_" >$null; } } 

инструкции

  1. Скопируйте и вставьте скрипт в блокнот или любой другой текстовый редактор (например, Notepad ++).

  2. Сохраните его как CreateFolders.ps1 (или любое другое имя, если вы сохраните соответствующее расширение).

  3. Чтобы запустить скрипт, вы можете запустить PowerShell, а затем либо:

    • Перейдите к фактическому пути, а затем выполните его:

       cd "C:\Some folder" & ".\CreateFolders.ps1" "X:\Some\folder\Export.txt" "X:\Destination\folder" 
    • Выполните его, указав полный путь напрямую:

       & "C:\Some folder\CreateFolders.ps1" "X:\Some\folder\Export.txt" "X:\Destination\folder" 

    & Является оператором вызова .

    В качестве альтернативы вы можете запустить его из обычной командной строки:

     powershell -ExecutionPolicy Bypass -NoLogo -NoProfile -File "C:\Some folder\CreateFolders.ps1" "X:\Some\folder\Export.txt" "X:\Destination\folder" 

Рекомендации

  • Запуск сценариев Windows PowerShell
  • Более мощные способы запуска Windows PowerShell
  • Получить контент для файловой системы

Предыдущие (вид рабочих) решений

Предупреждение! Не используйте их, если вы заранее не знали целевую систему и данные, с которыми имеете дело. Если вы все еще хотите, убедитесь, что они работают должным образом.

Пакетный скрипт

Следующий скрипт будет прокручивать все строки в файле списка и создавать столько папок, называя их после фактического содержимого строки. Сценарий принимает два параметра: первый – это путь, в котором хранится список, который жестко закодирован как Export.txt (не стесняйтесь помещать другое имя файла, но избегайте пробелов); Последняя является папкой назначения.

 @echo off setlocal REM make sure there are enough parameters if "%~2" == "" exit /b 2 REM set the working directory pushd "%~1" REM loop through the list and create the folders for /f "delims=" %%G in (Export.txt) do (md "%~2\%%~G") REM restore the working directory and exit popd endlocal & exit /b 

Известные ограничения

  • Только ASCII или ANSI входные файлы.

Пакетный сценарий – альтернативная версия UTF-8

Этот скрипт похож на предыдущий, но в этом случае текстовый файл не читается напрямую, а анализируется через вывод команды type . chcp требуется chcp , чтобы изменить кодировку на UTF-8. В этом случае список не является жестко запрограммированным, но должен быть указан как часть первого параметра. Второй параметр – папка назначения.

 @echo off setlocal REM make sure there are enough parameters if "%~2" == "" exit /b 2 REM set the working directory pushd "%~2" REM set the list file set file="%~1" REM set the encoding to UTF-8 chcp 65001 >nul REM loop through the list and create the folders for /f "delims=" %%G in ('type %file%') do (md "%%~G") REM restore the working directory and exit popd endlocal & exit /b 

Известные ограничения

  • В английских локалях команда chcp 65001 остановит выполнение пакетного сценария, тем самым пропустив любую другую команду.
Interesting Posts

Как установить Sun / Oracle Java SDK на Ubuntu?

Почему в Java 8 split иногда удаляет пустые строки при начале массива результатов?

MVC3 Non-Sequential Indices и DefaultModelBinder

Android – прослушивание входящих SMS-сообщений

Что такое менеджер хранения матричных данных Intel? И что делает IAAnotif.exe работающим в фоновом режиме?

Бесплатная утилита для записи в NTFS на Mac OS X 10.6.5?

Одновременное использование двух беспроводных сетевых адаптеров на настольном ПК Windows 10

Как свести кран на eth0 на малиновый пи?

Как заставить повторную визуализацию после преобразования WebKit 3D в Safari

Будет ли код в объявлении finally загораться, если я верну его значение в блоке Try?

Какую информацию может видеть мой интернет-провайдер с моего маршрутизатора?

org.hibernate.PersistentObjectException: отдельный объект, переданный для сохранения

Как передать данные json POST в метод Web API как объект?

Как запустить WampServer без предоставления прав администратора?

Просеивать реализацию с помощью OpenCV 2.2

Давайте будем гением компьютера.