Saltar al contenido

¿Cómo crear varias carpetas y nombrarlas leyendo líneas del archivo de texto?

Investigamos por distintos espacios y así tener para ti la respuesta a tu problema, en caso de alguna inquietud deja tu pregunta y contestaremos con gusto, porque estamos para ayudarte.

Solución:

Aquí hay un script de Powershell que hace lo que quiere.

$folder="X:Test";             # Directory to place the new folders in.
$txtFile="X:TestExport.txt"; # File with list of new folder-names
$pattern="d+.+";              # Pattern that lines must match      


get-content $txtFile | %

    if($_ -match $pattern)
    
        mkdir "$folder$_";
    

Esto incluirá los dígitos del nombre.

Para ejecutar el script, haga lo siguiente.

  1. Ejecute Powershell como administrador.
  2. Escribir Set-ExecutionPolicy RemoteSigned y presione Entrar para habilitar la ejecución de scripts. Presione Y cuando se le solicite.
  3. Cierre Powershell.
  4. Copie y pegue el script anterior en el Bloc de notas o el Bloc de notas ++.
  5. Reemplazar X:Test con la ruta absoluta a la ubicación donde desea crear sus nuevas carpetas.
  6. Reemplazar X:TestExport.txt con la ruta absoluta al archivo de texto que contiene los nombres que desea usar para estas carpetas.
  7. Reemplazar d+.+ con el patrón las líneas deben coincidir.
    d+ coincide con cualquier número .+ coincide con cualquier personaje.
  8. Guárdelo como “FileName.ps1” o el nombre que desee. Solo asegúrate de mantener el .ps1 extensión.
  9. Abra el Explorador de Windows y vaya a la ubicación donde guardó su archivo ps1. Haga clic derecho sobre él y seleccione “Ejecutar con Powershell”.

Capturas de pantalla …

a

BCD

Solución híbrida Batch / VBS

Probado con Windows XP SP3, Vista SP2 y Windows 7 SP1. Es un script por lotes especialmente diseñado con un VB Script incrustado que hace el trabajo real. De esta forma obtienes un script que deberían ser compatible con cualquier sistema operativo lanzado después de XP SP2. El mérito principal es para jeb y dbenham, quienes idearon (y perfeccionaron) la técnica híbrida utilizada aquí.

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

Instrucciones

  1. Copie y pegue la secuencia de comandos anterior en el Bloc de notas o en cualquier otro editor de texto sin formato (por ejemplo, Bloc de notas ++).

  2. Guárdalo como CreateFolders.cmd o el nombre que quieras. Solo asegúrate de mantener el .cmd extensión.

  3. Abra un símbolo del sistema y navegue hasta la carpeta donde guardó el archivo:

    cd /d "X:FoldercontainingCreateFolders.cmd"
    
  4. Ejecute el script por lotes especificando el archivo de lista y la carpeta de destino como primer y segundo parámetro, respectivamente:

    CreateFolders.cmd "X:SomefolderExport.txt" "X:Destinationfolder"
    

Capturas de pantalla

BC

Referencias

  • Referencia de la línea de comandos
  • ¿Es posible incrustar y ejecutar VBScript dentro de un archivo por lotes sin utilizar un archivo temporal?
  • Objeto de transmisión (ADO)

Solución PowerShell

El siguiente script de PowerShell replica la solución anterior. Acepta dos parámetros, el primero es el archivo de lista (que se supone que está guardado como UTF-8) y el segundo es la carpeta de destino. Probado con Windows XP SP3, Vista SP2 y Windows 7 SP1.

Nota Windows PowerShell 2.0 se incluye con Windows 7, pero debe instalarse manualmente en XP / Vista. En cuanto a Windows XP, debe tener instalado .NET Framework 2.0 SP1 / SP2, o .NET Framework 3.5 SP1, que incluyen .NET Framework 2.0 SP2. Windows 8 y Windows 8.1 incluyen PowerShell 3.0 y 4.0, respectivamente.

if ($args.Count -gt 1)
 % md "$dest$_" >$null; 

Instrucciones

  1. Copie y pegue la secuencia de comandos anterior en el Bloc de notas o en cualquier otro editor de texto sin formato (por ejemplo, Bloc de notas ++).

  2. Guárdalo como CreateFolders.ps1 (o cualquier otro nombre, siempre que mantenga la extensión adecuada).

  3. Para ejecutar el script, puede iniciar PowerShell y luego:

    • Navegue hasta la ruta real y luego ejecútela:

      cd "C:Some folder"
      & ".CreateFolders.ps1" "X:SomefolderExport.txt" "X:Destinationfolder"
      
    • Ejecútelo especificando la ruta completa directamente:

      & "C:Some folderCreateFolders.ps1" "X:SomefolderExport.txt" "X:Destinationfolder"
      

    & es el operador de la llamada.

    Como alternativa, puede iniciarlo desde un símbolo del sistema normal:

    powershell -ExecutionPolicy Bypass -NoLogo -NoProfile -File "C:Some folderCreateFolders.ps1" "X:SomefolderExport.txt" "X:Destinationfolder"
    

Referencias

  • Ejecución de scripts de Windows PowerShell
  • Formas más eficaces de iniciar Windows PowerShell
  • Obtener contenido para el sistema de archivos

Soluciones anteriores (tipo de trabajo)

¡Advertencia! No los use a menos que conozca de antemano el sistema de destino y los datos con los que está tratando. Si aún lo desea, asegúrese de que funcionen como se espera.

Secuencia de comandos por lotes

El siguiente script recorrerá todas las líneas del archivo de lista y creará tantas carpetas, nombrándolas después del contenido de la línea real. El script acepta dos parámetros: el primero es la ruta donde se almacena la lista, que está codificada como Export.txt (no dude en poner un nombre de archivo diferente, pero evite los espacios); la última es la carpeta 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

Limitaciones conocidas

  • Solo archivos de entrada ASCII o ANSI.

Secuencia de comandos por lotes: versión alternativa de UTF-8

Este script es similar al anterior, pero en este caso el archivo de texto no se lee directamente sino que se analiza a través del type salida de comando. los chcp primero se requiere para cambiar la codificación a UTF-8. En este caso, la lista no está codificada, sino que debe especificarse como parte del primer parámetro. El segundo parámetro es la carpeta 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

Limitaciones conocidas

  • En las localizaciones inglesas, el chcp 65001 El comando detendrá la ejecución del script por lotes, omitiendo así cualquier otro comando.

Nos encantaría que puedieras dar visibilidad a este enunciado si te valió la pena.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *