Друзья, необходимо выборочно перенести каталоги (и подкаталоги) и файлы в резервную папку.
Список выбранных каталогов сохранён в файле dir.txt, например:
Docs\!Каталог 1
Docs\Каталог 2
Docs\Каталог 3
Для выборочного переноса выполняется следующий код:
Код:
Код: Выделить всё
@echo off
cls
setlocal enabledelayedexpansion
set curdisk=%~d0
for /f "usebackq delims=" %%A in ("dir.txt") do (
Set "folder_from="%curdisk%\%%A""
set "folder_where="%curdisk%\%date:~6,4%-%date:~3,2%-%date:~0,2% reserv\%%A""
if not exist !folder_where! md !folder_where!
move /Y !folder_from!\*.* !folder_where!
FOR /F "delims=" %%I IN ('DIR /B /AD !folder_from!') DO (
move /Y !folder_from!\"%%I" %1 !folder_where!
)
if exist !folder_from! rd !folder_from! | echo !folder_from!
)Но если в названии выбранного каталога или в названии его подкаталогов имеется "!" (восклицательный знак), код не работает. Из названия каталогов/подкаталогов исчезает "!".
Если в файле dir.txt знак ! экранировать ^, код работает только с этим каталогом.
Docs\^!Каталог 1
Структура этого каталога может быть такой:
Docs\!Каталог 1
Docs\!Каталог 1\Папка 1!
Docs\!Каталог 1\!Папка 2
Docs\!Каталог 1\Папка !3
Docs\!Каталог 1\Папка 4
Т.е. ! знак может оказаться в любом месте в названии подкаталога и/или файлов.
Каким образом экранировать ! знак в подкаталогах и файлах этой папки? Может у кого есть другое решение по переносу заданных списком каталогов со всеми файлами?
Robocopy c ключом /mov переносит файлы с путями, а /move и директори, но при этом они будут удалены из источника, если только пустые. Я проверял, работает.