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

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

Ответить
Настройки темы
CMD/BAT - Спецсимволы при перенаправлении

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


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

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


В общем возникла проблема при написании батника:
считываю построчно текстовый файл и перенаправляю строки в другой тестовый файл, но проблема в том что в файле некоторые строки содержат спецсимволы (<>&) и при перенаправлении, через обычное echo возникают ошибки. Можно ли как-то за экранировать эти символы, что бы в новый файл все записалось как надо??
Вот часть скрипта:
@echo off
for /f "tokens=* delims=" %%a in (c:\12.txt) do call :Change "%%a"
:Change
set Text=%~1
echo %~1|findstr "43" > nul
if %errorlevel% == 0 (
(echo VarC=200)>> c:\newfile.txt
) else (
echo %Text% >> c:\newfile.txt
)

Отправлено: 22:26, 14-04-2012

 

Старожил


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

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


Специмволы вообще экранируются через ^, но если неизвестно заранее, сколько их будет в строке - это не выход. Но если использовать вывод внутри цикла, то его особенностью будет то, что нахождение в считанной строке специмволов не повлияет на вывод. Пример:
Код: Выделить весь код
@Echo Off
Set InFile=test.txt
Set OutFile=out.txt
For /F "usebackq delims=" %%A In ("%InFile%") Do (
	Echo %%A|Find "43">nul&&(
		Echo VarC=200>>"%OutFile%"
	)||(
		Echo.%%A>>"%OutFile%"
	)
)2>nul
Недостаток - если искомый паттерн ("43") будет в одной строке со спецсимволами, его Find не найдет.

Последний раз редактировалось Anonymоus, 21-05-2012 в 03:07.

Это сообщение посчитали полезным следующие участники:

Отправлено: 23:21, 14-04-2012 | #2



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

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


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


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

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


вроде работает. только есть одна проблема, если встречается пустая строка, то в новый файл записывается "Режим вывода команд на экран (ECHO) отключен."
как это можно исправить??

Отправлено: 00:00, 15-04-2012 | #3


Старожил


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

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


H1ghlander, у меня на XP SP3 цикл for просто игнорирует пустые строки, не могу воспроизвести, увы. Но попробуйте заменить Echo %%A>>"%OutFile%" на
Код: Выделить весь код
If Not "%%A"=="" (Echo %%A>>"%OutFile%") Else (Echo.>>"%OutFile%")

Отправлено: 00:15, 15-04-2012 | #4


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


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

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


Нет не помогает.
Сообщение появляется, только в том случае если перед переносом строки находится пробелы или знаки табуляции.

Отправлено: 09:39, 15-04-2012 | #5


Аватара для El Sanchez

Ветеран


Contributor


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

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


H1ghlander, попробуйте так:
Код: Выделить весь код
For /F "Tokens=1* Delims=:" %%A In ('Type "C:\12.txt"^|FindStr /in $') Do ((@Echo:"%%B"|Find "43" 1>nul&&@Echo:VarC=200)&(@Echo:"%%B"|Find /v "43" 1>nul&&@Echo:%%B))>>out.txt

Последний раз редактировалось El Sanchez, 15-04-2012 в 17:47. Причина: пропустил завершающие кавычки


Отправлено: 11:32, 15-04-2012 | #6


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


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

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


El Sanchez,
Твой вариант выводит только номера строк, да и причем всех подряд, в том числе где есть пусты строки

Отправлено: 12:30, 15-04-2012 | #7


Старожил


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

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


H1ghlander, вот ещё такой вариант, в этом случае делает проверку, не является ли таб или пробел первым символом строки, если да - то пишет пустую строку. А вообще, это очень плохое решение, вам стоит помотреть в сторону sed (http://gnuwin32.sourceforge.net/packages/sed.htm)

Код: Выделить весь код
@Echo Off
SetLocal EnableDelayedExpansion
Set InFile=test.txt
Set OutFile=out.txt
For /F "usebackq delims=" %%A In ("%InFile%") Do (
	Set String=%%A
	Echo %%A|Find "43">nul&&(
		Echo VarC=200>>"%OutFile%"
	)||(
		If Not "!String:~,1!"=="	" If Not "!String:~,1!"==" " Echo %%A>>"%OutFile%"
		If "!String:~,1!"=="	" Echo.>>"%OutFile%"
		If "!String:~,1!"==" " Echo.>>"%OutFile%"
	)
) 2>nul
pause

Отправлено: 13:37, 15-04-2012 | #8


Аватара для El Sanchez

Ветеран


Contributor


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

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


Цитата H1ghlander:
Твой вариант выводит только номера строк, да и причем всех подряд, в том числе где есть пусты строки »
H1ghlander, неправда, но кавычки я пропустил . Исправил.

Отправлено: 17:51, 15-04-2012 | #9


Аватара для CyberMuesli

Старожил


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

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


Код: Выделить весь код
@echo off
setlocal enabledelayedexpansion

set A1=^<A^&B^>
set A1
echo A1=!A1!
echo !A1!>temp.tmp
type temp.tmp
del temp.tmp
C:>test.bat
A1=<A&B>
A1=<A&B>
<A&B>

-------
Кибер Мюсли


Отправлено: 02:40, 21-05-2012 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
2010 - PowerPoint 2010 не распознаются спецсимволы Kaimor Microsoft Office (Word, Excel, Outlook и т.д.) 0 03-11-2011 18:52
VBS/WSH/JS - необходимо менять разрешения на раздел реестра содержащий спецсимволы thebas Скриптовые языки администрирования Windows 2 30-03-2009 15:19
[решено] При перенаправлении принтера терминального клиента не назначаются права доступа vladimirniki Microsoft Windows NT/2000/2003 2 02-12-2008 07:54
Прочее - Linux и спецсимволы... Bren74 Общий по Linux 3 21-10-2007 22:20
[решено] Не работают спецсимволы. Catalyst Microsoft Windows 2000/XP 11 13-02-2007 13:54




 
Переход