Como mover arquivos da pasta pai e não de subpastas?

0

Então, eu tenho este código:

for /r ../ %%a IN (*.pdf) do move "%%a" ".\"

e estou tentando mover todos os arquivos PDF da pasta pai e não das subpastas do pai. Por exemplo,

Meu diretório atual é Child1 e tenho isso

Pai / Filho1

Parent / Child2 / Some-PDF-File.PDF

Pai / Filho3 / Outro-Arquivo PDF.PDF

Pai / PDF1.PDF

Pai / PDF2.PDF

Pai / PDF3.PDF

Estou tentando mover somente arquivos PDF1.PDF, PDF2.PDF e PDF3.PDF para Child1. No entanto, meu código move todos os arquivos PDF.

O que preciso fazer?

Obrigado.

P.S. Isso faz parte do meu arquivo de lote

ECHO

for %%a in (..\*.pdf) do (
    move "%%a" .
    )

pause

for %%i in (*.pdf) do (
    pdftotext -enc UTF-8 "%%i" ".\output\%%~ni.txt"
    )

cd .\Output

findstr /S /I ## *.txt > ../log.txt

pause

cd ..

for %%F in ("log.txt") do (
    if %%~zF equ 0 (
        del "%%F"
        cd .\Output
        for /F "delims=" %%j in ('dir /b') do (
            del "%%j" /s/q
        )
    )
)

pause

for %%a in (*.pdf) do (
    move "%%a" ..
    )
    
por Ramin Melikov 15.09.2016 / 23:19

2 respostas

0

No entanto, meu código move todos os arquivos PDF.

for /r ../ %%a IN (*.pdf) do move "%%a" ".\"

What do I need to do?

No comando for acima, você especificou /r , o que significa que o comando for é recursivo - Fazer um loop pelos arquivos (subpastas Recurse).

Existem várias soluções diferentes para esse problema, mas um seria o seguinte arquivo em lote:

test.cmd:

@echo off 
setlocal enabledelayedexpansion
for %%a in (..\*.pdf) do (
  move "%%a" .
  )
endlocal

uso:

F:\test\Child1>dir ..\*.pdf
 Volume in drive F is Expansion
 Volume Serial Number is 3656-BB63

 Directory of F:\test

27/08/2016  11:06                 0 1complete1.pdf
27/08/2016  11:06                 0 2complete2.pdf
27/08/2016  11:06                 0 complete1.pdf
27/08/2016  11:06                 0 complete2(s).pdf
               4 File(s)              0 bytes
               0 Dir(s)  1,764,571,938,816 bytes free

F:\test\Child1>test
        1 file(s) moved.
        1 file(s) moved.
        1 file(s) moved.
        1 file(s) moved.

F:\test\Child1>dir
 Volume in drive F is Expansion
 Volume Serial Number is 3656-BB63

 Directory of F:\test\Child1

16/09/2016  12:53    <DIR>          .
16/09/2016  12:53    <DIR>          ..
27/08/2016  11:06                 0 1complete1.pdf
27/08/2016  11:06                 0 2complete2.pdf
27/08/2016  11:06                 0 complete1.pdf
27/08/2016  11:06                 0 complete2(s).pdf
16/09/2016  12:53               102 test.cmd
               5 File(s)            102 bytes
               2 Dir(s)  1,764,571,938,816 bytes free
    
por 16.09.2016 / 13:55
0
cd /path/to/parent
mv *.pdf Child1

ou apenas

mv /path/to/parent/*.pdf /path/to/parent/Child1

Com mv , se você não especificar recurse, ele não recorre.

Desde que chegou ao meu conhecimento que o "código" original está em lote,

cd <drive>:\path\to\parent
move *.pdf Child1

ou

move <drive>:\path\to\parent\*.pdf <drive>:\path\to\parent\Child1

ou execute o primeiro código publicado no PowerShell, com o caminho na sintaxe do Windows.

Não importa qual caminho, não importa qual SO e shell, o OP está executando um comando recursivo e obtém um resultado recursivo. Se OP quiser o conteúdo de uma pasta, o OP precisa se mover para lá e executar 'localmente', executar com um caminho relativo ou executar com um caminho absoluto. Se a execução do comando tiver para ser mais profunda no sistema de arquivos do que a origem e o destino, o OP deve usar caminhos absolutos, já que os caminhos relativos ficam feios quando você tenta subir '. / p>     

por 15.09.2016 / 23:50