2

Я пытаюсь исправить следующую проблему через командный файл.

test - это родительская папка, которая содержит дополнительные подпапки test1 , test2 , test3 . Все эти подпапки test1 , test2 , test3 содержат некоторые файлы .docx и дополнительный архив подпапок.

  • Найдите существующие файлы .docx в подпапках test1 , test2 , test3 .
  • Скопируйте их в нужную папку с именем destination .

Следующий код прекрасно работает для первой части проблемы:

for /R "C:\test" %%f in (*.docx) do xcopy %%f "C:\Users\%USERNAME%\Desktop\destination\"  /exclude:c:\test\not_required.txt

Теперь я хочу переместить файлы .docx из подпапок test1 , test2 , test3 в соответствующий архив подпапок. До сих пор я мог только построить следующий код для второй части моей проблемы.

for /d /r "c:\test" %%a in (*) do (
if /i "%%~nxa"=="archiv" set "folderpath=%%a"
move "C:\test\test1\test1.docx" "%folderpath%" 
)

Как вы можете видеть, я дал исходному статическому перемещению файла C:\test\test1\test1.docx . Я не уверен, как использовать больше переменных внутри циклов, и, к сожалению, это не работает так, как хотелось бы. Совет от некоторых экспертов будет высоко оценен.

1 ответ1

0

Проблема с вашим подходом заключается в том, что For /R также будет погружаться в архивные папки, поэтому этого следует избегать.

Если структура вашей папки не имеет разной глубины, вы можете использовать for /d с подстановочным знаком, чтобы получить только прямые подпапки C:\test

С этим примером ситуации:

> tree /F
C:\
├───Test
│   ├───test1
│   │   │   Example_8192.docx
│   │   │   Example_32457.docx
│   │   │
│   │   └───archive
│   ├───test2
│   │   │   Example_14218.docx
│   │   │   Example_20916.docx
│   │   │
│   │   └───archive
│   └───test3
│       │   Example_12174.docx
│       │   Example_9168.docx
│       │
│       └───archive
└───Users
    └───UserName
        └───Desktop
            └───Destination

Этот пакет используется для модификаторов переменных :

:: C:\Copy+Archive.cmd
@Echo off
For /D %%D in ("C:\test\*") do (
    Echo Processing %%D
    For %%F in ("%%~fD\*.docx") do (
        Echo Copying "%%~fF" "C:\Users\%USERNAME%\Desktop\Destination\"
        xcopy "%%~fF" "C:\Users\%USERNAME%\Desktop\Destination\" >Nul && (
        Echo Moving  "%%~fF" "%%~dpFarchive\"
        Move  "%%~fF" "%%~dpFarchive\" >Nul
        )
    )
)

даст этот результат

> tree /f
C:\
│   Copy+Archive.cmd
│
├───Test
│   ├───test1
│   │   └───archive
│   │           Example_8192.docx
│   │           Example_32457.docx
│   │
│   ├───test2
│   │   └───archive
│   │           Example_14218.docx
│   │           Example_20916.docx
│   │
│   └───test3
│       └───archive
│               Example_12174.docx
│               Example_9168.docx
│
└───Users
    └───UserName
        └───Desktop
            └───Destination
                    Example_8192.docx
                    Example_32457.docx
                    Example_14218.docx
                    Example_20916.docx
                    Example_12174.docx
                    Example_9168.docx

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