Solução híbrida em lote / VBS
Testado com o Windows XP SP3, o Vista SP2 e o Windows 7 SP1. É um script em lote especialmente criado com um Script VB incorporado que faz o trabalho real. Dessa forma, você obtém um script que deve ser compatível com qualquer sistema operacional lançado após o XP SP2. O principal crédito vai para jeb e dbenham que inventam (e refinam) a técnica híbrida usada aqui.
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
Instruções
-
Copie e cole o script acima no Bloco de notas ou em qualquer outro editor de texto simples (por exemplo, o Notepad ++).
-
Salve como CreateFolders.cmd
ou qualquer outro nome que você queira. Apenas certifique-se de manter a extensão .cmd
.
-
Abra um prompt de comando e navegue até a pasta em que você salvou o arquivo:
cd /d "X:\Folder\containing\CreateFolders.cmd"
-
Execute o script em lote especificando o arquivo de lista e a pasta de destino como o primeiro e o segundo parâmetro, respectivamente:
CreateFolders.cmd "X:\Some\folder\Export.txt" "X:\Destination\folder"
Screenshots
Referências
Solução do PowerShell
O seguinte script do PowerShell replica a solução acima. Ele aceita dois parâmetros, sendo o primeiro o arquivo de lista (que é considerado como sendo salvo como UTF-8) e o segundo é a pasta de destino. Testado com o Windows XP SP3, o Vista SP2 e o Windows 7 SP1.
Observação O Windows PowerShell 2.0 é fornecido com o Windows 7, mas precisa ser instalado manualmente no XP / Vista. Quanto ao Windows XP, você precisa ter o .NET Framework 2.0 SP1 / SP2 instalado ou o .NET Framework 3.5 SP1, que inclui o .NET Framework 2.0 SP2. O Windows 8 e o Windows 8.1 incluem o PowerShell 3.0 e 4.0, respectivamente.
if ($args.Count -gt 1)
{
$file=$args[0];
$dest=$args[1];
Get-Content $file -Encoding UTF8 | %{ md "$dest\$_" >$null; }
}
Instruções
-
Copie e cole o script acima no Bloco de notas ou em qualquer outro editor de texto simples (por exemplo, o Notepad ++).
-
Salve como CreateFolders.ps1
(ou qualquer outro nome, desde que você mantenha a extensão correta).
-
Para executar o script, você pode iniciar o PowerShell e, em seguida:
-
Navegue até o caminho real e execute-o:
cd "C:\Some folder"
& ".\CreateFolders.ps1" "X:\Some\folder\Export.txt" "X:\Destination\folder"
-
Execute-o especificando o caminho completo diretamente:
& "C:\Some folder\CreateFolders.ps1" "X:\Some\folder\Export.txt" "X:\Destination\folder"
&
é o operador de chamadas .
Como alternativa, você pode iniciá-lo a partir de um prompt de comando normal:
powershell -ExecutionPolicy Bypass -NoLogo -NoProfile -File "C:\Some folder\CreateFolders.ps1" "X:\Some\folder\Export.txt" "X:\Destination\folder"
Referências
Soluções anteriores (tipo de trabalho)
Atenção! Não os use a menos que você saiba antecipadamente o sistema alvo e os dados com os quais está lidando. Se você ainda quiser, verifique se eles funcionam conforme o esperado.
Script em lote
O script a seguir percorrerá todas as linhas do arquivo de lista e criará tantas pastas, nomeando-as depois do conteúdo real da linha. O script aceita dois parâmetros: o primeiro é o caminho onde a lista é armazenada, que é codificada como Export.txt
(sinta-se livre para colocar um nome de arquivo diferente, mas evite espaços); a última é a pasta de destino.
@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
Limitações conhecidas
- Apenas arquivos de entrada ASCII ou ANSI.
Script em lote - versão alternativa do UTF-8
Este script é semelhante ao acima, mas neste caso o arquivo de texto não é lido diretamente, mas analisado através da saída do comando type
. O chcp
é necessário primeiro para alterar a codificação para UTF-8. Nesse caso, a lista não é codificada, mas precisa ser especificada como parte do primeiro parâmetro. O segundo parâmetro é a pasta de destino.
@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
Limitações conhecidas
- Em localidades em inglês, o comando
chcp 65001
interromperá a execução do script em lote, ignorando qualquer outro comando.