Вы можете запустить цикл 2 для получения полного имени в первом цикле, затем разделить имя во втором цикле, получить третий токен, создать каталог и затем скопировать фактическое имя файла из первого цикла.
Таким образом, вам не нужно снова пытаться исправить имя вместе, я знаю, что это работает, но это уродливо и не является предпочтительным:
@echo off
setlocal enabledelayedexpansion
set "sourcedir=D:\Sourcedir"
pushd %sourcedir%
for %%a in (*.pdf) do (
set "var=%%a"
for /f "tokens=3" %%i in ("!var!") do (
echo md "%%~ni"
echo move "%%~a" "%%~ni"
)
)
popd
goto EOF
Для получения дополнительной информации об этих командах см. Справку для каждогос cmd.exe
т.е.
for /?
set /?
setlocal /?
set
и setlocal
содержит очень конкретную информацию относительно отложенного расширения.