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

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

Ответить
Настройки темы
CMD/BAT - [решено] Добавление числа после точки с условием

Старожил


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

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


Изменения
Автор: foma24
Дата: 06-06-2013
Добрый день. Помогите решить такую задачу. Есть файл 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
Благодарности: 8087

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


Georgio, почему не просто:
Код: Выделить весь код
findstr.exe /r /e /c:"Сумм:[0-9][0-9]" /c:"Сумм:[0-9][0-9]\.[0-9]" "%%~i"
?
Это сообщение посчитали полезным следующие участники:

Отправлено: 03:11, 07-06-2013 | #11



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

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


Ветеран


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

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


Iska, зта "сволочь", именуемая утилитой findstr.exe, никак не хочет напрямую воспринимать кириллицу. Ни смена кодовой страницы, ни перекодирование BAT-файла не приносят результата. Но, как видите, выход существует. Кстати, так и думал, что кто-нибудь спросит.

Отправлено: 03:58, 07-06-2013 | #12


Ветеран


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

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


У меня — воспринимает:
Код: Выделить весь код
E:\Песочница\0269>chcp
Текущая кодовая страница: 866

E:\Песочница\0269>findstr.exe /r /e /c:"Сумм:[0-9][0-9]" /c:"Сумм:[0-9][0-9]\.[0-9]" E:\Песочница\0269\*.txt
E:\Песочница\0269\112.txt:Сумм:30
E:\Песочница\0269\112.txt:Сумм:10.1
? Windows XP SP3.
Это сообщение посчитали полезным следующие участники:

Отправлено: 07:34, 07-06-2013 | #13


Старожил


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

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


Всем спасибо все прекрасно работает.

Подскажите еще, в том же файле еще есть строки вида <КоллПлат>45<\КоллПлат> с которыми нужно сделать тоже самое. На PS все прекрасно работает, а вот CMD не хочет воспринимать символы <> можно ли что то с этим сделать ?

Отправлено: 09:51, 07-06-2013 | #14


Ветеран


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

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


Цитата foma24:
нужно сделать тоже самое »
-- то есть оставить беэ изменения?

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

Отправлено: 10:13, 07-06-2013 | #15


Старожил


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

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


Простите что не уточнил. Лучше всего было бы и то и то. Т.е. тоже один батник ищет файлы с такой строкой в папке, другой батник корректирует файл и сохраняет в другой файл. Извините что надоедаю со своей проблемой

Отправлено: 10:26, 07-06-2013 | #16


Ветеран


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

Профиль | Отправить 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-файл будет искать в файлах строки, содержащие "<КоллПлат>" и, если таковые найдёт, то скопирует зтот файл в назначенную папку.

Второй BAT-файл, котрый будет обрабатывать такие файлы, дописываю.
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:40, 07-06-2013 | #17


Ветеран


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

Профиль | Отправить 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
Благодарности: 575

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



Цитата Iska:
У меня — воспринимает »
Цитата Iska:
Windows XP SP3 »


Вот скрипт, который я протестировал в своей 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
Благодарности: 8087

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


Цитата Georgio:
А вот результат выполнения: »
Почему не текстом?

Цитата Georgio:
Вот скрипт…»
Кодировка его не OEM/866, а ANSI/1251, так?

Цитата Georgio:
в тех версиях Windows XP … на которых я работал, проблем с кириллицей для findstr.exe не было. »
Были [выделение моё].
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:10, 07-06-2013 | #20



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход