Если вы планируете добавлять другие части к путям, хранящимся в переменных, не храните пути с окружающими их кавычками. Просто оставьте двойные кавычки или поставьте их так:
...
set "recordedtv=D:\Recorded TV\"
set "destfolder=D:\Videos\Recorded TV\"
...
Таким образом, вы сможете объединять пути с именами / масками, не вызывая синтаксических ошибок. Обратите внимание, что ваши пути не разделены двойными кавычками, поэтому вам нужно будет разделять их там, где они оцениваются, по мере необходимости, например, циклы for
будут выглядеть так:
for %%f in ("%recordedtv%*.wtv") do ...
...
for %%f in ("%recordedtv%*.mpg") do ...
Обратите внимание и на другие места. Например, в команде move
в вашем скрипте целевой путь также должен быть разделен:
move "%%f.mpg" "%destfolder%"
Что касается проверки существования файла, то это делается с помощью команды if exist
:
if exist <i>target_file</i> (
... // do whatever you need to do in case the file exists
)
Бит target_file
может быть файлом, маской или каталогом (в последнем случае он должен заканчиваться \
).
UPDATE
Я думаю, что теперь вижу конкретную проблему с вашим скриптом. Эта часть
for %%f in (%recordedtv%*.wtv) Do If Not Exist "%destfolder%%%f.mpg"
неверно в том смысле, что он объединяет папку назначения и полный путь к файлу .wtv
и использует полученную строку в качестве единого пути. Так что "%destfolder%%%f"
оценивается примерно так:
"D:\Videos\Recorded TV\D:\Recorded TV\somename.wtv.mpg"
Я не уверен только в дополнительных кавычках, но здесь дело не в этом. Я думаю, вы можете увидеть главную проблему. Чтобы решить эту проблему, вам нужно извлечь только имя и расширение файла из D:\Recorded TV\somename.wtv.mpg
, что делается с помощью объединенного спецификатора ~nx
(n
означает «имя» и x
для «расширение»):
for %%f in ("%recordedtv%*.wtv") Do If Not Exist "%destfolder%%%~nxf.mpg"
(Обратите внимание, что пути к папкам по-прежнему должны храниться без окружающих двойных кавычек, чтобы они правильно оценивались в сложных выражениях.)