PDA

Показать полную графическую версию : [решено] Заменить в конце строк " /f на "/f >nul


dassen
14-10-2024, 04:09
Заменить в конце строк (кодировка 866):
" /f
на
"/f >nul
Причина: надоело вводить вручную (много!).
Со спецсимволами замучился...
Буду рад помощи (только CMD/BAT)!

NickM
14-10-2024, 07:33
Типа такого?

Проверили последние два символа, и если требуется, то прилепили строку с символами, а после создали новый файл.
@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
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
Хоть и не просили, тем не менее, вот вариант на 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
DJ Mogarych,
Спасибо. Красиво. Однако именно для меня на текущиий момент бесполезно.
Нужен именно CMD/BAT!!!!!!!!!

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

NickM
14-10-2024, 10:47
Изменил код выше.

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

dassen
14-10-2024, 11:01
NickM,
СПАСИБО! именно то, что нужно!




© OSzone.net 2001-2012