Я использую forfiles в пакетном файле , чтобы найти все файлы, измененные за последний день, и сохранить их в каталоге архива.
Сценарий отлично работает для перетаскивания файлов из одного каталога в другой, однако он не выполняет нужную функцию при наличии подкаталогов.
например, у меня есть расположение источника и каталог архива.В исходном каталоге есть следующая структура:
C:\Temp\Source\test1.txt
C:\Temp\Source\Folder\test2.txt
Архивный каталог - это просто расположенная ниже папка без файлов / подпапок:
C:\Temp\Archive
Мое текущее использование ForFiles
подхватывает test1.txt
и test2.txt
и выводит их в каталог Archive
, что является нежелательным результатом:
C:\Temp\Archive\test1.txt
C:\Temp\Archive\test2.txt
Что я хочу сделать, это сохранить структуру папок и получить эторезультат:
C:\Temp\Archive\test1.txt
C:\Temp\Archive\Folder\test2.txt
Это код, который я сейчас использую для достижения нежелательного результата:
FORFILES /S /p %source_dir% /m *.* /d +%datedsub% /c "cmd /c copy @path %archive_dir%"
%datesub%
- это только моя переменная, чтобы решить, какая датаскопировать из.
Я заметил, что я мог бы добиться этого, используя параметр @relpath
, удалив кавычки и .\
, а затем добавив его к %archive_dir%
, чтобы яуказав весь путь назначения, а не только местоположение Archive
.
Моя проблема в том, что я не знаю, как управлять переменными @
в команде ForFiles
.