Пакетный файл Windows Pandoc создает неправильный путь openBinary файл не существует - PullRequest
0 голосов

ПРОБЛЕМА

Это может быть связано с отсутствием глубокого понимания кодирования пакетных файлов Windows.

Я пытаюсь написать простой пакетный файл в одну строку, который будет обрабатывать каждый файлв каталоге, используя pandoc для преобразования всех файлов doc или docx (MS Word) в файлы разметки (.md).Когда я запускаю свой пакетный файл, я получаю следующую ошибку:

pandoc: C: _ALL \ _ALL \ccess \ testing-acce-2017.05 \ 20170505.md: openBinaryFile: не существует (такого файла нетили каталог)

Я получаю одну из этих ошибок для каждого файла в каталоге ( около 25 или около того ).

Каталог, который я запускаюМоя команда выглядит следующим образом:

C:\_ALL\!accomp\testing-accomp-2017.05

Как видите, по какой-то причине _ALL появляется дважды.Путь, который он показывает мне, по какой-то причине неверен, и я не уверен, является ли это проблемой pandoc или проблемой программирования командного файла CMD.

МОЙ КОД

Воткод для моего командного файла:

@echo OFF

:: [Not sure what this does, but have read that it is necessary]
setlocal enabledelayedexpansion

:: MAIN
FOR /r "." %%i IN (*.doc *.docx) DO pandoc -f rst -t markdown "%%~fi" -o "%%~dpni.md"

:: End with a pause so user can copy any text from screen.
ECHO. Done. Press any key to terminate program
PAUSE>NUL

Теперь я не уверен, что делают все эти строки кода, и они могут быть совершенно ненужными для всего, что я знаю.Тем не менее, основным и наиболее важным кодом здесь является тот, который начинается с For ..., вдохновленный этой статьей переполнения стека:

ЧТО Я ПРОБОВАЛ УЖЕ

По сути, в приведенном выше посте есть примерно четыре варианта одного и того же ответа, и я попробовал каждый из этих вариантов.

1 Ответ

0 голосов
/ 28 мая 2018

Ошибка вызвана отложенным расширением и восклицательным знаком ! в имени каталога !accomp.

Расширение командной строки для FOR во время выполнения с файлом 20170505.doc до:

pandoc -f rst -t markdown "C:\_ALL\!accomp\testing-accomp-2017.05\20170505.doc" -o "C:\_ALL\!accomp\testing-accomp-2017.05\20170505.md"

Эта командная строка анализируется командным процессором Windows второй раз перед выполнением из-за включенного отложенного расширения переменной среды, поиска ссылки !variable! и замены их назначение указанных переменных.

Строка !accomp\testing-accomp-2017.05\20170505.doc" -o "C:\_ALL\! здесь полностью неверно истолкована из-за восклицательных знаков.Итак, в конечном итоге выполняется:

pandoc -f rst -t markdown "C:\_ALL\\_ALL\accomp\testing-accomp-2017.05\20170505.md"

И файл C:\_ALL\\_ALL\accomp\testing-accomp-2017.05\20170505.md не существует.

Решение устраняет setlocal enabledelayedexpansion, поскольку в этом нет необходимости, поскольку в * 1024 не используется переменная среды* FOR командная строка.

@ECHO OFF

FOR /r "." %%i IN (*.doc *.docx) DO pandoc.exe -f rst -t markdown "%%i" -o "%%~dpni.md"

:: End with a pause so user can copy any text from screen.
ECHO Done. Press any key to terminate program ...
PAUSE>NUL

Переменная цикла i содержит здесь уже полное имя файла.Поэтому "%%~fi" можно заменить на "%%i".

И лучше использовать ECHO/ вместо ECHO., хотя здесь . или / не требуется.См. Тему форума DosTips ЭХО.Не удалось дать текст или пустую строку - вместо этого используйте ECHO / по причине.

...