Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Заменить в конце строк " /f на "/f >nul (http://forum.oszone.net/showthread.php?t=355768)

dassen 14-10-2024 04:09 3031620

Заменить в конце строк " /f на "/f >nul
 
Заменить в конце строк (кодировка 866):
Код:

" /f
на
Код:

"/f >nul
Причина: надоело вводить вручную (много!).
Со спецсимволами замучился...
Буду рад помощи (только CMD/BAT)!

NickM 14-10-2024 07:33 3031621

Типа такого?

Проверили последние два символа, и если требуется, то прилепили строку с символами, а после создали новый файл.
Код:

@echo off
setlocal enableextensions enabledelayedexpansion
 
set "ext=.bat"
set "addstr= >nul"
set "compstr=/f"

for /f "tokens=* delims=" %%i in ('dir "%~dp0*%ext%" /b /a-d') do (
 set "src=%%~i"
 for /f "delims=" %%? in ('type "!src!"^& del /f /q "!src!"') do (
  set "t=%%?"
  call set "tmpstr=%%t:~-2%%"
  if "!tmpstr!" NEQ "!compstr!" (
  echo.!t!>>"!src!"
  )
  if "!tmpstr!" EQU "!compstr!" (
  call set "tmpstr=%%t%%%%addstr%%"
  echo.!tmpstr!>>"!src!"
  )
 )
)


dassen 14-10-2024 09:46 3031624

NickM,
1) Кавычки в обоих кодах - это часть обрабатываемого текста...
2) Нужно обработать только концы строк, заканчивающихся этим:
Код:

" /f
Другими словами (для примера), input:
Код:

Reg Add "HKCR\..HEXADEC" /v "гд_" /t REG_BINARY /d "ddff" /f
Reg Add "HKCR\..HEXADEC" /v "гд_0" /t REG_NONE /d "dd,ff" /f
::          Утилита Reg не поддерживает тип данных - hex(1):
::          Проигнорирована строка "гд_1"=hex(1):dd,ff
Reg Add "HKCR\..HEXADEC" /v "гд_2" /t REG_EXPAND_SZ /d "dd,ff" /f

output:
Код:

Reg Add "HKCR\..HEXADEC" /v "гд_" /t REG_BINARY /d "ddff" /f >nul
Reg Add "HKCR\..HEXADEC" /v "гд_0" /t REG_NONE /d "dd,ff" /f >nul
::          Утилита Reg не поддерживает тип данных - hex(1):
::          Проигнорирована строка "гд_1"=hex(1):dd,ff
Reg Add "HKCR\..HEXADEC" /v "гд_2" /t REG_EXPAND_SZ /d "dd,ff" /f >nul

для всех *.bat, находящихся на одном уровне с будущим батником.

P.S. Смотрю в сторону Findstr...

DJ Mogarych 14-10-2024 09:58 3031625

Хоть и не просили, тем не менее, вот вариант на Powershell v5.
Изменяются только те файлы, где есть искомый паттерн (в конце строки).
Код:

$files = dir C:\temp\*.bat

foreach ($f in $files) {
$content = gc $f.fullname -Encoding Oem
    if ($content -match '\" /f$') {
        $content -replace '\" /f$','" /f >nul' |Set-Content $f.fullname -Encoding Oem
    }
}


dassen 14-10-2024 10:44 3031626

DJ Mogarych,
Спасибо. Красиво. Однако именно для меня на текущиий момент бесполезно.
Нужен именно CMD/BAT!!!!!!!!!

P.S. До Powershell, наверное, доберусь уже на пенсии или еще позже...

NickM 14-10-2024 10:47 3031627

Изменил код выше.

Проверили последние два символа и перезаписали файл.

dassen 14-10-2024 11:01 3031628

NickM,
СПАСИБО! именно то, что нужно!


Время: 00:02.

Время: 00:02.
© OSzone.net 2001-