1 (изменено: belokolodov, 2014-10-11 20:16:52)

Тема: CMD/BAT: Поиск строки и замена цифры в ней

Доброго времени, задача появилась с переходом часовых зон.
Необходимо найти в фаиле строку, она ниже, и цифру заменить на -1(только цифра символ перед ней не меняется), т.е. если цифра в конце 4 то должна произойти замена на 3 (4-1=3), если 7 то соответственно на 6. Подскажите пожалуйста скриптик. Фаил находится всегда в одном месте в одной папке на одном диске, если можно то еще и указать путь к фаилу напрямую.

date.timezone = Etc/GMT-4

Заранее благодарен.

2

Re: CMD/BAT: Поиск строки и замена цифры в ней

@echo off
chcp 1251>nul

set "file=D:\Test\example.txt"
set "template=date.timezone = Etc/GMT"

for /f "tokens=1* delims=:" %%i in ('findstr /n ^^^^ "%file%"') do (
 if "%%j"=="" (
  echo.>>.tmp
  ) else (
  for /f "tokens=1,2 delims=-" %%k in ("%%j") do (
   if not "%%k"=="%template%" (
    echo.%%j>>.tmp
    ) else (
    for /f %%m in ('set /a %%l-1') do (
     echo %%k-%%m>>.tmp
     )
    )
   )
  )
 )
move .tmp "%file%">nul

exit /b

3

Re: CMD/BAT: Поиск строки и замена цифры в ней

Спасибо, а можно как то сделать что б он не удалял закоментированные строки, такие как

; For several security-oriented considerations that should be taken
; before going online with your site, please consult php.ini-recommended

4 (изменено: Yury, 2014-10-11 22:47:20)

Re: CMD/BAT: Поиск строки и замена цифры в ней

@echo off
chcp 1251>nul

set "file=D:\Test\example.txt"
set "template=date.timezone = Etc/GMT"

for /f "tokens=1* delims=:" %%i in ('findstr /n ^^^^ "%file%"') do (
 if "%%j"=="" (
  echo.>>.tmp
  ) else (
  for /f "tokens=1,2 delims=- eol=" %%k in ("%%j") do (
   if not "%%k"=="%template%" (
    echo.%%j>>.tmp
    ) else (
    for /f %%m in ('set /a %%l-1') do (
     echo %%k-%%m>>.tmp
     )
    )
   )
  )
 )
move .tmp "%file%">nul

exit /b

5

Re: CMD/BAT: Поиск строки и замена цифры в ней

Спасибо огромнейшее.

6

Re: CMD/BAT: Поиск строки и замена цифры в ней

Yury, можно было и так:

@echo off
  setlocal
    set sed="%tmp%\foo"
    for /f "tokens=1,2 delims=-" %%i in (
      'findstr /irc:"^date.timezone" foo'
    ) do (
      set /a "dec=%%j - 1"
      set "str=%%i"
    )
    set "str=%str%-%dec%"
    
    for /f "tokens=*" %%i in (
      'type foo'
    ) do (
      (echo %%i | findstr /vrc:"^date.timezone") || echo %str%
    )>>%sed%
    
    move /y %sed% foo
  endlocal
exit /b

Где foo - файл, который требуется обработать.