Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Как экранировать \

Ответить
Настройки темы
CMD/BAT - Как экранировать \

Новый участник


Сообщения: 10
Благодарности: 0

Профиль | Отправить PM | Цитировать


Добрый день. Попросили прикрутить утилиту. На вход она просит текст, при этом внутри она ищет \r\n и по ним разбивает строку на подстроки. Проблема в том что когда я ввожу в консоль текст с \r\n, она почему то его автоматически экранируются слешем(\\r\\n), в следствии чего программе не может получить подстроки. Кавычки одинарные и двойные не помогают, если сам экранирую и прямым и обратным слешем тоже не помогает. Подскажите пожалуйста как победить win консоль?

Отправлено: 15:12, 07-08-2017

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата NikiWin:
Попросили прикрутить утилиту. »
Где её взять? Приведите ссылку.

Цитата NikiWin:
Проблема в том что когда я ввожу в консоль текст с \r\n, »
Покажите Ваш код. Продемонстрируйте, как вводите.

NikiWin, причём тут консоль? \r\n — это C.

Отправлено: 15:46, 07-08-2017 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Новый участник


Сообщения: 10
Благодарности: 0

Профиль | Отправить PM | Цитировать


К сожалению утилиту не могу выложить. Запускаю ее из консоли командой: C:\MyProg\prog.exe param1\r\nparam2. Загвоздка в том, что к строке vector <string> vM = split<string>(var[1], "\r\n") переменная var[1] имеет значение уже param1\\r\\nparam2. Изменить программу я не могу. Можно как-то запретить cmd менять \ на \\?

Отправлено: 16:00, 07-08-2017 | #3


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


NikiWin, ещё раз: интерпретатор команд тут не при чём. Он ничего здесь не меняет. Можете взять Process Explorer и посмотреть, что приходит на вход утилите. Можете взять Process Monitor и убедиться и с его помощью.

Я не пойму: у Вас есть её исходный код? Откуда это:
Цитата NikiWin:
к строке vector <string> vM = split<string>(var[1], "\r\n") переменная var[1] »
На чём она написана?

Отправлено: 16:30, 07-08-2017 | #4


Новый участник


Сообщения: 10
Благодарности: 0

Профиль | Отправить PM | Цитировать


У меня есть ее исходный код, но я не могу ее менять. Написана она на С. Если посмотреть через Process Explorer то действительно, в командной строке везде по одному слешу выдает, но если сразу в main вывести argv то получим C:\\MyProg\\prog.exe в argv[0] и param1\\r\\nparam2 в argv[1].

Отправлено: 16:45, 07-08-2017 | #5

mwz mwz вне форума

Аватара для mwz

Ушел из жизни


Сообщения: 8595
Благодарности: 2127

Профиль | Сайт | Отправить PM | Цитировать


Цитата NikiWin:
в командной строке везде по одному слешу выдает »
Дурацкий вопрос... А если вообще без слэшей ввести?

-------
Mikhail Zhilin


Отправлено: 16:59, 07-08-2017 | #6


Новый участник


Сообщения: 10
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изображения
Тип файла: jpg Inkeddevenv_2017-08-07_16-56-50_LI.jpg
(48.3 Kb, 9 просмотров)

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

Отправлено: 17:03, 07-08-2017 | #7


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата NikiWin:
Написана она на С. »
На приведённом скриншоте вовсе не C.

Цитата mwz:
А если вообще без слэшей ввести? »
Так и останется «rn».


NikiWin, вопрос упирается в конкретный язык и конкретный компилятор.

Скрытый текст
Код: Выделить весь код
#include <stdio.h>

int main (int argc, char *argv[]) {
	int count;

	if (argc > 1) {
		for (count = 1; count < argc; count++) {
			printf("argv[%d] = %s\n", count, argv[count]);
		}
	} else {
		printf("The command had no other arguments.\n");
	}

	return 0;
}


Отправлено: 20:17, 07-08-2017 | #8


Новый участник


Сообщения: 10
Благодарности: 0

Профиль | Отправить PM | Цитировать


Используется Visual с++. Я проверил у меня тоже корректно выводит из приложения данные(с одним слешем), но именно в программе отладчик показывает два слеша и судя по работе split переменные внутри программы содержат два слеша.

Отправлено: 09:04, 08-08-2017 | #9


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата NikiWin:
но именно в программе отладчик показывает два слеша »
Вы пробовали посмотреть в отладчике именно argv[1], а не значение других переменных после присвоения? Я-то точно не буду загружать и устанавливать VC++ только из-за этого. Могу только сказать, что на шарпе (благо компилятор от него идёт в комплекте с .Net) этого также не происходит:
Скрытый текст
Код: Выделить весь код
class CommandLine {
	static void Main(string[] args) {
		System.Console.WriteLine("parameter count = {0}", args.Length);

		for (int i = 0; i < args.Length; i++) {
			System.Console.WriteLine("Arg[{0}] = [{1}]", i, args[i]);
		}
	}
}

Последний раз редактировалось Iska, 08-08-2017 в 09:30.


Отправлено: 09:25, 08-08-2017 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Как экранировать \

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - экранировать скобки в данных из реестра kokos76 Скриптовые языки администрирования Windows 9 11-01-2016 08:21
CMD/BAT - [решено] Как экранировать символ? Seryoga204 Скриптовые языки администрирования Windows 7 27-09-2010 22:50
CMD/BAT - [решено] Как экранировать символ "=" в имени файла chobov Скриптовые языки администрирования Windows 3 11-09-2010 01:28




 
Переход