En Dash в запросе пакетного задания пути к файлу - PullRequest
0 голосов
/ 20 ноября 2018

Надеясь, кто-то может помочь.У меня есть пакетное задание (Windows env), которое просто копирует файл в другую папку.

copy "\\ACP-MS-NAS21\Global\MEC Daily Productivity\Business Analysts\Master_List\HCP_Master_List.xlsx" ^
     "\\ACP-MS-NAS21\Global\CSD [?] DWP Medical Services\CSL_CSD_DB\Master_List"

Но я получаю следующую ошибку:

Имя файла, имя каталога илиневерный синтаксис метки тома.

Я вижу, что в пути к файлу есть черта, которая, по моему мнению, вызывает проблему.Есть ли какой-нибудь способ иметь подстановочный знак в пути к файлу или каким-либо другим способом, которым задание может это распознать?

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

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Спасибо за все ответы.Мне пришлось изменить дизайн моей БД, поэтому мне удалось обойти необходимость сделать это сейчас (phew:))

Еще раз спасибо

0 голосов
/ 21 ноября 2018

Окна командной строки (и, соответственно, файлы BAT) по умолчанию работают в кодовой странице OEM.Какая именно кодовая страница определяется настройками вашей ОС (Language for non-Unicode programs или аналогичной).Поэтому вы обычно не можете использовать что-либо вне ASCII или любой другой кодовой страницы, которая у вас есть.

Сохранить скрипт как UTF-8

Чтобы использовать эти символы, вам нужно будет работать с кодовой страницей, которая на самом деле имеет их.UTF-8 - лучший вариант для этих задач (и, вероятно, единственный, который будет работать в вашем случае).

Сначала сохраните ваш скрипт как UTF-8.В notepad вы можете выбрать кодовую страницу из меню save as.

Если ваш редактор не позволяет вам выбрать UTF-8 (no BOM), оставьте первую строку вашего BAT-файла пустой, поскольку некоторые редакторы могут предварять ваш файл специальным заголовком BOM, который помогает обнаруживать кодовую страницу.Если это произойдет, и вы оставите первую строку пустой, вы получите ошибку Bad command or file name, как только ваш скрипт запустится, но это не помешает его правильной работе.

Выберите кодовую страницу UTF-8

Теперь ваш сценарий находится в UTF-8, но процессор команд Windows по-прежнему будет выполнять его, как если бы он был в ASCII, что повредит все специальные символы.Чтобы указать нашу кодировку, нам нужно добавить следующую команду, предпочтительно в качестве первой непустой строки вашего скрипта, включая комментарии (в них могут быть символы не ASCII - с непредсказуемыми результатами)

CHCP 65001

CHCP изменяет текущую кодовую страницу на 65001, которая является внутренним номером кодовой страницы для UTF-8.

Это работает, потому что латинские буквы и цифры в UTF-8 имеют ту же кодировку, что и в кодовых страницах ASCII и OEM,Таким образом, ваши сценарии начинают выполняться в кодовой странице OEM, но, поскольку сама команда CHCP 65001 не имеет символов, отличных от ASCII, она правильно поняла.Все последующие команды будут выполняться в UTF-8 и могут содержать символы не-ASCII.

Теперь вы можете вставить em-dash в имя файла, и оно не будет заменено на ? при сохранении.

Установить шрифт UTF-8

К сожалению, стандартный шрифт окна консоли не отображает UTF-8 правильно, поэтому вы не сможете правильно видеть символы не ASCII.Чтобы решить эту проблему, вы должны щелкнуть правой кнопкой мыши строку заголовка окна командной строки, выбрать properties и изменить шрифт на UNICODE.Consolas, Lucida Console и Courier New должны работать.

...