Como criar diretórios baseados em nomes de arquivos e mover esses arquivos para dentro deles usando o CMD?

1

Como eu disse, eu tenho alguns Arquivos * .Xml em uma pasta, eu quero movê-los para sub-dirs com base em seus nomes.

Mas preciso de mais duas coisas: -

1- Eu tenho que aplicar / executar o comando a partir de um diretório pai, não do diretório * .xml

2- depois de fazer as sub-dirs necessárias e mover os arquivos xml para elas, eu quero mover todas elas para um novo diretório chamado "XML Backup"

Por exemplo: - meus arquivos localizados assim

X:\folder1\folder2\file1.xml
X:\folder1\folder2\file2.xml
X:\folder1\folder2\file3.xml

o que eu preciso fazer é exatamente assim: -

X:\folder1\folder2\xml_Backup\file1\file1.xml
X:\folder1\folder2\xml_Backup\file2\file2.xml
X:\folder1\folder2\xml_Backup\file1\file3.xml

por favor, tenha em mente que eu tenho que executar o comando de X:\folder1

a propósito, eu tentei usar este comando a partir de um arquivo de lote de maneiras diferentes, mas eu não pude fazê-lo por causa das condições do que eu preciso fazer: -

for /R %%F in (*.xml) do (
2>nul md "%%~nF"
>nul Move /y "%%~nF.*" "%%~nF"
)

Se você tentou executar este lote / comando a partir do diretório * .xml, ele fará os Sub-Dirs corretamente (com base nos nomes dos arquivos xml), e moverá os arquivos xml para eles, mas o problema é depois de fazer o novo dirs, eu preciso mover essas dirs xml em outro diretório chamado "Xml Backup".

    
por KorkOoO 08.10.2014 / 21:29

2 respostas

1

the problem is after making the new dirs, I need to move these xml dirs into another directory named "Xml Backup"

Modifique seu lote para criar a pasta "xml_Backup" (se ela não existir) e inclua isso nos seus caminhos de destino para os comandos MD e Move no loop.

Algo como:

rem Change to folder specified as argument.
pushd %1

rem Check if 'backup' folder exists; if not, create it.
if not exist "xml_Backup" md "xml_Backup"

rem Loop through files in the current folder.
for /R %%F in (*.xml) do (
  rem Create subfolder in 'backup' folder matching this file's name.
  md "xml_Backup\%%~nF"
  rem Move file to that folder.
  move /y "%%~nF.*" "xml_Backup\%%~nF"
)

rem Change back to the original directory we were in when pushd was executed.
popd

Execute com batchname.bat "c:\folderContainingXMLs" .

IE: batchname.bat "X:\folder1\folder2" ou batchname.bat ".\folder2" , etc.

    
por 08.10.2014 / 21:49
0

Se o PowerShell for uma opção, você pode tentar isso. Faça isso em alguns dados de teste primeiro - eu não testei ainda.

New-Item X:\folder1\folder2\xml_backup -Type Directory
Get-ChildItem X:\folder1\folder2\*.xml |
ForEach-Object {
    $XMLName = $_.BaseName
    New-Item "X:\folder1\folder2\xml_backup\$XMLName" -Type Directory
    Move-Item $_ "X:\folder1\folder2\xml_backup\$XMLName"
}

Seu maior problema, eu acho, é que você está abordando o problema de trás para frente. Você quer:

  1. Crie pastas específicas de arquivos.
  2. Mova os arquivos para suas pastas específicas.
  3. Crie uma pasta de backup em XML.
  4. Mova as pastas específicas do arquivo e seu conteúdo para o XML Backup.

O que você deve estar fazendo, como feito no script acima, é:

  1. Crie a pasta XML Backup.
  2. Crie pastas específicas de arquivos na pasta XML Backup.
  3. Mova os arquivos para a subpasta apropriada.

Modificações adicionais serão necessárias para o script acima, se você quiser que ele seja executado em mais do que apenas os arquivos XML em X:\folder1\folder2 (por exemplo, outros arquivos XML em subpastas adjacentes).

    
por 08.10.2014 / 21:49