Итак, у меня есть этот код:

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

и я пытаюсь переместить все файлы PDF из родительской папки, а не из подпапок родителя. Например,

Мой текущий каталог - Child1, и у меня есть это

Родитель /Child1

Родитель /Child2 / Некоторый-PDF-файл.PDF

Родитель /Child3 / Другой-PDF-файл.PDF

Родитель /PDF1.PDF

Родитель /PDF2.PDF

Родитель /PDF3.PDF

Я пытаюсь переместить только файлы PDF1.PDF, PDF2.PDF и PDF3.PDF для ребенка1. Тем не менее, мой код перемещает все файлы PDF.

Что мне нужно сделать?

Благодарю.

PS Это часть моего командного файла

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" ..
    )

2 ответа2

0

Тем не менее, мой код перемещает все файлы PDF.

для /r ../ %% a IN (* .pdf) переместите "%% a" ".\"

Что мне нужно сделать?

В приведенной выше команде for вы указали /r , что означает, что команда for является рекурсивной - циклически проходите файлы (подпапки Recurse).

Существует много различных решений этой проблемы, но одним из них будет следующий пакетный файл:

test.cmd:

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

использование:

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
0
cd /path/to/parent
mv *.pdf Child1

или просто

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

С mv , если вы не укажете рекурс, он не рекурсирует

Поскольку мне стало известно, что оригинальный «код» находится в пакете,

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

или же

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

или запустите первый опубликованный код в PowerShell, указав путь в синтаксисе Windows.

Независимо от того, каким путем, независимо от того, какая ОС и оболочка, OP выполняет рекурсивную команду и получает рекурсивный результат. Если OP хочет содержимое одной папки, OP должен переместиться туда и выполнить «локально», выполнить с относительным путем или выполнить с абсолютным путем. Если выполнение команды должно быть из глубины в файловой системе , чем источник и место назначения, то OP следует использовать абсолютные пути, так как относительные пути становятся уродливыми , когда вы пытаетесь идти «вверх».

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .