|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Добавление числа после точки с условием |
|
CMD/BAT - [решено] Добавление числа после точки с условием
|
Старожил Сообщения: 186 |
Добрый день. Помогите решить такую задачу. Есть файл 111.txt который лежит в C:\ в нем много строк текста. Нужно найти строки вида:
Сумм:30 Сумм:10.1 Сумм:50.03 С этих строках, там, где после точки идет одно число в конце нужно дописать 0, т.е. строка Сумм:10.1 должна стать Сумм:10.10, а там где нет точки добавить точку и два нуля, т.е. вместо Сумм:30 должно стать Сумм:30.00, строку с двумя цифрами после точки оставить без изменений. Файл с изменениями сохранить в 222.txt P.S. в принципе можно и не в CMD, а в WHS или PowerShell |
|
Отправлено: 15:01, 06-06-2013 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать |
Отправлено: 03:11, 07-06-2013 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 874
|
Профиль | Отправить PM | Цитировать Iska, зта "сволочь", именуемая утилитой findstr.exe, никак не хочет напрямую воспринимать кириллицу. Ни смена кодовой страницы, ни перекодирование BAT-файла не приносят результата. Но, как видите, выход существует. Кстати, так и думал, что кто-нибудь спросит.
|
Отправлено: 03:58, 07-06-2013 | #12 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать |
Отправлено: 07:34, 07-06-2013 | #13 |
Старожил Сообщения: 186
|
Профиль | Отправить PM | Цитировать Всем спасибо все прекрасно работает.
Подскажите еще, в том же файле еще есть строки вида <КоллПлат>45<\КоллПлат> с которыми нужно сделать тоже самое. На PS все прекрасно работает, а вот CMD не хочет воспринимать символы <> можно ли что то с этим сделать ? |
Отправлено: 09:51, 07-06-2013 | #14 |
Ветеран Сообщения: 874
|
Профиль | Отправить PM | Цитировать |
Отправлено: 10:13, 07-06-2013 | #15 |
Старожил Сообщения: 186
|
Профиль | Отправить PM | Цитировать Простите что не уточнил. Лучше всего было бы и то и то. Т.е. тоже один батник ищет файлы с такой строкой в папке, другой батник корректирует файл и сохраняет в другой файл. Извините что надоедаю со своей проблемой
|
Отправлено: 10:26, 07-06-2013 | #16 |
Ветеран Сообщения: 874
|
Профиль | Отправить PM | Цитировать @ECHO OFF ECHO ^<КоллПлат^>>temp.txt FOR %%I IN ("E:\Folder 1\*") DO ( FINDSTR /G:temp.txt "%%~I">nul&&^ COPY "%%~I" "E:\Folder 2\">nul ) DEL temp.txt Второй BAT-файл, котрый будет обрабатывать такие файлы, дописываю. |
Отправлено: 13:40, 07-06-2013 | #17 |
Ветеран Сообщения: 874
|
Профиль | Отправить PM | Цитировать Данный BAT-файл обрабатывает нужные файлы в пакетном режиме, причём обрабатываются все строки, включая и строки с угловыми скобками, так что необходимость в предыдущем BAT-файле может отпасть. Этот скрипт можно даже использовать сразу, без сортировки файлов, так как, если в файле не нужно делать замены, то такой файл будет переписан без изменений. Так что проверяйте.
@ECHO OFF SETLOCAL ENABLEDELAYEDEXPANSION ::Выставляем папку, файлы в которой нужно обработать (без кавычек)::: SET In=E:\Folder 1 ::Выставляем папку (также без кавычек), в которую будут помещаться :: ::обработанные файлы (можно установить ту же самую папку, т. к. :: ::файлы будут сораняться с добавлением "_new" к старому имени)::: SET Out=E:\Folder 2 ( FOR %%I IN ("%In%\*.txt") DO ( FOR /F "usebackq tokens=*" %%J IN ("%%~I") DO ( FOR /F "tokens=1,3 delims=:." %%K IN ("%%J") DO ( IF %%K==Сумм ( SET VAR1=%%L IF DEFINED VAR1 ( SET VAR2=!VAR1:~1! IF DEFINED VAR2 ( ECHO %%J>>"%Out%\%%~nI_new.txt" ) ELSE ( ECHO %%J0>>"%Out%\%%~nI_new.txt" )) ELSE ( ECHO %%J.00>>"%Out%\%%~nI_new.txt" )) ELSE ( SET /P VAR="%%J" 0>nul 1>>"%Out%\%%~nI_new.txt" ECHO.>>"%Out%\%%~nI_new.txt" )))))&&^ ECHO All's ready. Press any key to exit.&&PAUSE>nul Единственное, что может вызвать ошибку,-- это наличие в строке непарных кавычек, но такие случаи на практике редки. Ещё о некоторых нюансах. 1. Пустые строки не переписываются. 2. Пробелы в начале строк также не сохраняются. 3. Если строка целиком заключена в кавычки, то кавычки отбрасываются. 4. Если ещё вдруг что-нибудь заметите, сообщите. |
Отправлено: 17:21, 07-06-2013 | #18 |
Ветеран Сообщения: 874
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Цитата Iska:
Вот скрипт, который я протестировал в своей Windows 7 Starter: CHCP findstr.exe /r /e /c:"Сумм:[0-9][0-9]" /c:"Сумм:[0-9][0-9]\.[0-9]" "E:\Folder 1\111.txt" findstr.exe /r /e /c:"‘㬬:[0-9][0-9]" /c:"‘㬬:[0-9][0-9]\.[0-9]" "E:\Folder 1\111.txt" findstr.exe /G:"E:\Folder 1\111.txt" "E:\Folder 1\111.txt" CHCP 1251 findstr.exe /r /e /c:"Сумм:[0-9][0-9]" /c:"Сумм:[0-9][0-9]\.[0-9]" "E:\Folder 1\111.txt" findstr.exe /r /e /c:"‘㬬:[0-9][0-9]" /c:"‘㬬:[0-9][0-9]\.[0-9]" "E:\Folder 1\111.txt" findstr.exe /G:"E:\Folder 1\111.txt" "E:\Folder 1\111.txt" PAUSE>nul Последние строки для каждой кодировки просто показывают содержимое файла. А вот результат выполнения: 2013-06-07_181350.jpg Жаль, что в данный момент больше не на чем проверить, но, если мне не изменяет память, в тех версиях Windows XP и Windows Vista, на которых я работал, проблем с кириллицей для findstr.exe не было. Очевидно, в Windows 7 Starter другая редакция этой утилиты. Так что тот вариант скрипта универсален. |
||
Отправлено: 18:51, 07-06-2013 | #19 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать |
Отправлено: 19:10, 07-06-2013 | #20 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - Замена и добавление числа в txt файле | Tsok | Скриптовые языки администрирования Windows | 0 | 17-10-2011 17:22 | |
2008 R2 - [решено] После добавление компьютера в домен не запускаются программы | mr.Den | Windows Server 2008/2008 R2 | 6 | 21-07-2010 12:36 | |
Прочие БД - Добавление нулей слева от числа | Jonik-Mnimonik | Программирование и базы данных | 2 | 04-12-2008 09:51 | |
две точки 2000AP+(a1+a2) и карта 650+ хочу репитер из точки | Soft_warrior | Microsoft Windows NT/2000/2003 | 0 | 03-05-2006 21:53 | |
Оптимизация MFS после удаления большого числа файлов | Vlad Drakula | Microsoft Windows 2000/XP | 6 | 25-11-2004 11:46 |
|