Ответ на этот вопрос заключается в том, чтобы взять то, что сказал один человек, и изменить его ...
paxdiablo был на правильном пути, однако это не копирование / вставка. Для его правильной работы (и, возможно, это только для меня под управлением Windows7) вам нужно 2 файла.
Первый файл: drag_drop.bat
@echo off
echo Drag and drop your .txt file here, after that press Enter:
set txtfile=
set /p txtfile=
echo.%txtfile%
call c:\temp\process_filename.bat %txtfile%
Второй файл: process_filename.bat
FOR %%i in (%txtfile%) do set txtdir=%~dp1
cmd /K "cd %txtdir%"
Причина, по которой мне пришлось использовать 2 файла, заключается в том, что триггер для% ~ dp1 (синтаксис которого был неверен в paxdiablo - без обид, я знаю, что у вас 187 тыс. Повторений, и я даю вам за это поддержку [у вас было %% ~ dpi , %% используется в echo для отключения специального символа '%', а dp1 - это разделитель, который позволяет убрать кавычки, путь к файлу из имени файла - то же самое относится и к %% ~ nxi])
Так или иначе, вам нужно вызвать командный файл, передав ему другое имя файла. Вот тут и приходит второй. Он убирает необходимую информацию, а затем позволяет вам получить доступ к этому пути, а затем открывает этот каталог в командной строке cmd.
АЛЬТЕРНАТИВА
Вы можете сделать это из того же файла ...
@echo off
setlocal
IF '%process%'=='1' goto processFile
echo Drag and drop your .txt file here, after that press Enter:
set txtfile=
set /p txtfile=
echo.%txtfile%
set process=1
call c:\temp\dragdrop.bat %txtfile%
:processFile
set txtdir=
FOR %%1 in (%txtfile%) do set txtdir=%~dp1
cmd /K "cd %txtdir%"
endlocal