Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/76: Рейтинг темы: голосов - 76, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 29.04.2013
Сообщений: 4

Копирование восклицательных знаков

29.04.2013, 22:23. Показов 14316. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток! Я совсем зеленый в bat файлах. Задачу поставили в принципе не сильно сложную, вкратце: есть папка с файлами конфигов, в файлах строки с коннектами к БД, как раз эти строки мне нужно заменить на определенные. После нескольких часов навоял следующее:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Set findDB=11.11.11.11
Set replaceDB=22.22.22.22
set findUsr=test
set replaceUsr=tst
 
 
setlocal enabledelayedexpansion 
for /f "delims=" %%d in ('dir \\testsrv\test\*.config /b/s') do (
 
for /f "tokens=*" %%F in (%%d) do ( 
set LINE=%%F 
set LINE=!LINE:%findDB%=%replaceDB%! 
set LINE=!LINE:%findUsr%=%replaceUsr%!
@echo !LINE!>>%%d_
)
del %%d /q
ren %%d_  %%~nd.config
)
endlocal
pause

Все хорошо, все читается, копируется, заменяется, НО наткнулся на проблему, в конфигах есть строки следующего содержания - <!--. Соответственно при !LINE!>>%%d_ восклицательный знак просто проглатывается и в конфиги попадает - <--. Попробовал другим путём, не для папки целиком, а хотя бы для 1 файла, однако, также безуспешно:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
set inifile=test.config
 
for /f "delims= tokens=*" %%f in (%inifile%) do call :_replace %%f 
pause
goto :eof
 
:_replace
set /a i=%f%
set i=%i:11.11.11.11=22.22.22.22%
set i=%i:test=tst%
echo %i%>>new.txt
pause
goto :eof
:eof
Хелп люди добрые, как мне вернуть восклицательные знаки на место=(
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.04.2013, 22:23
Ответы с готовыми решениями:

Удаление или замена на другие символы восклицательных знаков в текстовом файле
Подскажите, пожалуйста. Есть файл txt с текстом. Там встречаются восклицательные знаки. Как можно удалить или заменить на какой-нибудь...

Подсчитать количество восклицательных знаков в строке
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; int main() { char s; int kz =...

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

5
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
29.04.2013, 23:38
Ход мыслей верный, только во втором случае переменную нужно получать через %~1

Полный код (названия взял с 1-го, а реализацию со 2-го):

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@echo off
SetLocal
Set findDB=11.11.11.11
Set replaceDB=22.22.22.22
set findUsr=test
set replaceUsr=tst
 
for /f "delims=" %%d in ('dir "\\testsrv\test\*.config" /b /s') do (
  for /f "UseBackQ delims=" %%F in ("%%d") do call :_replace "%%F" "%%d_"
  del "%%d" /q
  ren "%%d_" "%%~nd.config"
)
pause
exit /B
 
:_replace
set "LINE=%~1"
call set "LINE=%%LINE:%findDB%=%replaceDB%%%"
call set "LINE=%%LINE:%findUsr%=%replaceUsr%%%"
echo %LINE%>>"%~2"
exit /B
Но будет быстрее, если вместо 2 Call в подпрограмме Вы напрямую подставите заменяемые значения.
1
0 / 0 / 0
Регистрация: 29.04.2013
Сообщений: 4
30.04.2013, 12:11  [ТС]
Спасибо за помощь, но к сожалению не помогло, выдает ошибку: "Непредвиденное появление: >" на строке echo %LINE%>>"%~2"....это же конфиг файл, все элементы в виде <абырвалг>,
Попробовал установить delims=<> , на что получил - ђҐ¦Ё¬ ўлў®¤* Є®¬**¤ ** нЄа** (ECHO) ®вЄ«озҐ*, это я попытался в эхо передать пустую строку.
Попробовал включить setlocal enabledelayedexpansion непосредственно перед echo %LINE%>>, при этом в файл вставляются обрывки записи
Уже на 3-м часу велико-научного метода тыка встал в тупик...
0
Модератор
Эксперт JS
 Аватар для Eva Rosalene
5241 / 2115 / 416
Регистрация: 06.01.2013
Сообщений: 4,846
30.04.2013, 12:31
В самое начало файла добавь "chcp 1251>nul", а в подпрограмме убери вывод в файл (после ехо ЛАЙН убери перегаправление.)
Напиши нам, что выведет cmd
1
0 / 0 / 0
Регистрация: 29.04.2013
Сообщений: 4
30.04.2013, 13:58  [ТС]
если по поводу вот етого - ђҐ¦Ё¬ ўлў®¤* Є®¬**¤ ** нЄа** (ECHO) ®вЄ«озҐ, то здесь написано - "Режим вывода команд на экран (ECHO) включен", спасибо гуглу=). А конкретно свою задачу решил так:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@echo off
Set findDB=11.11.11.11
Set replaceDB=22.22.22.22
set findUsr=oratest
set replaceUsr=oratst
 
setlocal enabledelayedexpansion 
for /f "delims=" %%d in ('dir d:\bats\*.config /b/s') do (
 
for /f "tokens=*" %%F in (%%d) do ( 
set LINE=%%F 
 
if !LINE! neq !LINE:^<--^=! (
set LINE=
) ELSE (
set LINE=!LINE:%findDB%=%replaceDB%!
set LINE=!LINE:%findUsr%=%replaceUsr%!
@echo !LINE! >> %%d_
)
)
 
)
endlocal
pause
Решил обходным путем убрать строки начинающиеся с <!-- (ну из таких ! сами убираются) или <--, что собственно, я и сделал, жаль пришлось пожертвовать комментариями в конфигах. Всем спасибо за помощь!
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
30.04.2013, 23:50
Там проблема была со знаками < >

Методом танцев с бубном решил задачу таким еще более медленным способом:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@echo off
SetLocal
Set findDB=11.11.11.11
Set replaceDB=22.22.22.22
set findUsr=full
set replaceUsr=tst
 
del file2.xml
 
for /f "UseBackQ delims=" %%F in ("file.xml") do echo.%%F>tmp& call :_replace
pause
exit /B
 
:_replace
set /p LINE=<tmp
call set "LINE=%%LINE:%findDB%=%replaceDB%%%"
call set "LINE=%%LINE:%findUsr%=%replaceUsr%%%"
for /f "delims=" %%a in ("%LINE%") do echo.%%a>>"file2.xml"
exit /B
Процедуру поиска по директории вернете сами. Так как я для себя упростил, тестировав на реальном XML-файле.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.04.2013, 23:50
Помогаю со студенческими работами здесь

Выяснить, где больше восклицательных знаков
Выяснить где больше восклицательных знаков - среди S1, S2, ..., Sn/2 или среди Sn/2+1, Sn/2+2, ..., Sn (не исключается и случай равенства)

Замена трех восклицательных знаков одним
Добрый день! Вводится предложение с клавиатуры, нужно заменить три восклицательных знака подряд - одним! Подскажите, как это описать?

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

Посчитать количество восклицательных знаков после 5 символа
Dim s As String, b As String Dim k As Integer Dim n As Integer, i As Integer s = TextBox1.Text n =...

Определить количество восклицательных знаков входящих в четные строки файла
Помогите пожалуйста!) в текстовом файле т определить количество восклицательных знаков входящих в четные строки. вывести на печать строки...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru