У меня проблема с командой reg , которую я пытаюсь добавить с помощью cmd. Любые идеи, как я могу исправить эту синтаксическую ошибку, поскольку команда dosent кажется неправильной ...

reg add HKEY_CLASSES_ROOT\Excel.Sheet.12\shell\Open\command /v command /t REG_MULTI_SZ /d xb'BV5!!!!!!!!!MKKSkEXCELFiles>VijqBof(Y8'w!FId1gLQ /dde /p "C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.EXE" /e "%1"

Мне нужно отредактировать command строку и добавить данные:

xb'BV5!!!!!!!!!MKKSkEXCELFiles>VijqBof(Y8'w!FId1gLQ /dde /p "C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.EXE" /e "%1"

2 ответа2

2

Любые идеи, как я могу исправить эту синтаксическую ошибку?

Ваш (бинарный?) Строка содержит символ > (который используется для перенаправления вывода команды в файл).

У тебя есть:

REG_MULTI_SZ /d xb'BV5!!!!!!!!!MKKSkEXCELFiles>VijqBof(Y8'w!FId1gLQ 

Попробуйте использовать ":

REG_MULTI_SZ /d "xb'BV5!!!!!!!!!MKKSkEXCELFiles>VijqBof(Y8'w!FId1gLQ"

Или избегая > с помощью ^>:

REG_MULTI_SZ /d xb'BV5!!!!!!!!!MKKSkEXCELFiles^>VijqBof(Y8'w!FId1gLQ 

Кроме того, ваша команда reg add ... выглядит неправильно.

У вас нет массива строк с нулевым значением, которые заканчиваются двумя нулевыми символами.

Вот правильный синтаксис.

REG ADD [ROOT] RegKey /v ValueName [/t DataType] [/S Separator] [/d Data] [/f]

где:

/S Separator: Символ для использования в качестве разделителя в значениях REG_MULTI_SZ по умолчанию "\0"

REG_MULTI_SZ Массив строк с нулевым символом в конце, оканчивающихся двумя символами NULL.

Источник REG.exe:

См. Https://stackoverflow.com/questions/8853911/reg-add-a-reg-multi-sz-multi-line-registry-value для получения дополнительной информации.


Синтаксис: Escape-символы, разделители и кавычки

Побег персонаж

^ Побег персонажа.

Добавление escape-символа перед символом команды позволяет рассматривать его как обычный текст.

При передаче или перенаправлении любого из этих символов вы должны использовать префикс с escape-символом: & \ <> ^ |

 e.g.  ^\  ^&  ^|  ^>  ^<  ^^

Синтаксис источника : Escape-символы, разделители и кавычки


Дальнейшее чтение

1

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

В этом случае вся строка данных, которую вы хотите добавить:

xb'BV5!!!!!!!!!MKKSkEXCELFiles>VijqBof(Y8'w!FId1gLQ /dde /p "C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.EXE" /e "%1"

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

Хитрость заключается в том, чтобы выяснить, какие кавычки (и другие символы) внутри этих разделительных кавычек необходимо экранировать, а затем выяснить, как избежать их для этого контекста.

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

reg add "HKEY_CLASSES_ROOT\Excel.Sheet.12\shell\Open\command" /v command /t REG_MULTI_SZ /d "xb'BV5!!!!!!!!!MKKSkEXCELFiles>VijqBof(Y8'w!FId1gLQ /dde /p \"C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.EXE\" /e \"%1\""

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

Просто зайдите на компьютер с настройками, которые вы хотите, а затем экспортируйте этот ключ в файл .reg .

Затем используйте reg import в вашем пакетном файле, чтобы импортировать этот файл .reg.

Если вам не нравится использовать / распространять два файла, и / или у вас нет центрального места, вы можете поместить его в сеть, тогда вы всегда можете заставить пакетный файл создать файл .reg на лету, повторив строки во временный текстовый файл, импортируйте его, а затем удалите временный файл, как только закончите.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .