Crie várias pastas e subpastas

0

Eu tenho usado esse script para criar pastas usando um arquivo de texto. Como adiciono subpastas?

for /f "tokens=* delims=," %d in (Panels.txt) do md %d

Atualmente, o script cria pastas no Painel-A; Panel-B etc para Panel-Z.

Eu preciso de subpastas, anule cada pasta Panel- * chamada:

  • 2014_Products
  • 2013_Products

A nova estrutura de pastas seria:

  • Panel-A \ 2014_Products
  • Panel-A \ 2013_Products
  • Panel-B \ 2014_Products
  • Panel-B \ 2013_Products
  • .
  • .
  • Panel-Z \ 2014_Products
  • Panel-Z \ 2013_Products

Como adiciono as subpastas?

    
por Rauriann 08.09.2014 / 12:43

1 resposta

0

Você poderia usar o PowerShell para isso. Ainda não testei o método abaixo, mas deve funcionar.

  1. Crie um arquivo CSV na raiz da pasta que você deseja iniciar.
    • É melhor usar o Excel ou outro editor de planilhas e o CSV "salvo como" delimitado por vírgulas.
    • Nomeie o arquivo FolderNames.csv
    • Crie duas colunas, com os cabeçalhos Name e Type
    • Coloque o nome de cada pasta do painel na coluna Nome, com Folder na coluna Tipo.
    • Coloque o nome de cada pasta Produtos (apenas uma vez em cada, não para cada combinação Painel / Produtos) na coluna Nome, com Subfolder na coluna Tipo.
  2. Abra um novo console do PowerShell.
  3. Navegue até a pasta que contém FolderNames.csv
  4. Execute o seguinte comando:
$Folders=Import-Csv FolderNames.csv;$Folders|?{$_.Type-eq'Folder'}|%{$ParentName=$_.Name;New-Item "$ParentName" -ItemType Directory;$Folders|?{$_.Type-eq'Subfolder'}|%{$ChildName=$_.Name;New-Item "$ParentName\$ChildName" -ItemType Directory}}

O comando acima é realmente um script condensado em um one-liner (um tanto longo). Aqui está uma versão expandida e comentada:

# Import FoldersNames.csv into a variable called $Folders
# This will create an array of objects which have the Name and Type properties as defined in the CSV.

$Folders=Import-Csv FolderNames.csv;

# Filter $Folders down to just objects with a Type value of 'Folder'.
# ? is a built-in alias for Where-Object.

$Folders|?{$_.Type-eq'Folder'}|

# Send the filtered objects into a ForEach-Object loop.
# % is a built-in alias for ForEach-Object.
%{
    # Store the current object's Name in $ParentName.

    $ParentName=$_.Name;

    # Create a new directory named $ParentName.

    New-Item "$ParentName" -ItemType Directory;

    # Filter $Folders down to just objects with a Type value of 'Subfolder'.

    $Folders|?{$_.Type-eq'Subfolder'}|

    # Send the filtered objects into a ForEach-Object loop.
    %{
        # Store the current object's Name in $ChildName.

        $ChildName=$_.Name;

        # Create a new subfolder in $ParentName called $ChildName.

        New-Item "$ParentName\$ChildName" -ItemType Directory
    }
}

Note que esta solução não é muito escalável como está. Se você precisar criar camadas mais profundas de subpastas ou colocar subpastas diferentes em determinadas pastas, dependendo do nome, não será realmente simples adaptar esse script às suas necessidades. No entanto, deve servir ao propósito descrito na sua pergunta.

    
por 08.09.2014 / 14:46

Tags