Учитывая мое понимание того, что вы пытаетесь сделать, я бы предложил что-то более похожее на это:
@Echo Off
Set "DestDirName=My Folder"
If Exist "%~dp0log.txt" Set /P "DestDirName="<"%~dp0log.txt"
If Exist "log.txt" Set /P "DestDirName="<"log.txt"
For %%A In (*)Do If /I Not "%%A"=="%~nx0" If Not "%%A"=="log.txt" If Not "%%~xA"=="" (
Set "FileExtension=%%~xA"
SetLocal EnableDelayedExpansion
RoboCopy . "%UserProfile%\Downloads\%DestDirName%\!FileExtension:~1!" "%%A" /Mov>Nul
EndLocal
)
Pause
Линии 2
, 3
и 4
будут Set
имя родительского каталога в Downloads
, в котором будут храниться каталоги, в которые будут перемещены ваши файлы.Я использовал новый каталог с именем My Folder
в качестве резервной копии на тот случай, если файл log.txt
не может быть найден ни в текущем каталоге, ни в том, в котором содержится ваш запущенный пакетный файл.В настоящее время он выбирает имя в следующем порядке предпочтения: «текущий каталог», «каталог пакетных файлов», «Моя папка»;Вы можете переключать строки 3
и 4
, если вы предпочитаете, чтобы «каталог файловых файлов» имел приоритет над «текущим» каталогом.Если найден log.txt
, команда Set /P
установит для переменной DestDirName
содержимое первой строки этого файла, , пожалуйста, не используйте двойные кавычки или обратную косую черту в этом содержимом .
Затем цикл For
переместит все файлы с расширениями в каталоги, названные с использованием их расширения, без начального периода , находящегося в каталоге, из строк 2
- 4
, а внутри директории users Downloads
.При этом он не будет включать себя или любой файл с именем log.txt
.
Кстати, не имеет значения, если строковое значение имени каталога %DestDirName%
уже существует в Downloads
, онбудет создан автоматически, если он не .