Пакетный / VBS гибридный раствор
Протестировано с Windows XP SP3, Vista SP2 и Windows 7 SP1. Это специально созданный пакетный скрипт со встроенным скриптом VB, который выполняет реальную работу. Таким образом, вы получаете скрипт, который должен быть совместим с любой операционной системой, выпущенной после XP SP2. Основная заслуга в этом Джеб и 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
инструкции
Скопируйте и вставьте скрипт выше в Блокнот или любой другой текстовый редактор (например, Блокнот ++).
Сохраните его как CreateFolders.cmd
или как хотите. Просто убедитесь, что у вас есть расширение .cmd
.
Откройте командную строку и перейдите к папке, в которой вы сохранили файл:
cd /d "X:\Folder\containing\CreateFolders.cmd"
Запустите пакетный скрипт, указав файл списка и папку назначения в качестве первого и второго параметра соответственно:
CreateFolders.cmd "X:\Some\folder\Export.txt" "X:\Destination\folder"
Скриншоты
Рекомендации
Решение 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 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; }
}
инструкции
Скопируйте и вставьте скрипт выше в Блокнот или любой другой текстовый редактор (например, Блокнот ++).
Сохраните его как CreateFolders.ps1
(или любое другое имя, если вы сохраняете правильное расширение).
Чтобы запустить скрипт, вы можете запустить 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"
Рекомендации
Предыдущие (рабочие) решения
Предупреждение! Не используйте их, если вы не знаете заранее целевую систему и данные, с которыми вы имеете дело. Если вы все еще хотите, убедитесь, что они работают как положено.
Пакетный скрипт
Следующий скрипт будет перебирать все строки файла списка и создавать как можно больше папок, присваивая им имена после фактического содержимого строки. Сценарий принимает два параметра: первый - это путь, по которому хранится список, который жестко задан как 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
требуется в первую очередь для того, чтобы изменить кодировку на 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
остановит выполнение пакетного скрипта, пропуская, таким образом, любую другую команду.