[Цитировать]

    Ander_73
  • 15549
  • Стаж: 7 лет 10 месяцев
  • Сообщений: 3868
  • Репутация:127

    [+] [-]
95109Каким кодом лучше удалить из текстового файла все строчки, кроме первой ?
for /f "usebackq delims=" %%a in ("in.txt") do >"out.txt" echo/%%a& goto :eof

[Цитировать]

    rekshd
  • 19892
  • Стаж: 6 лет
  • Сообщений: 331
  • Репутация:7

    [+] [-]
95111
Код:
for /f "usebackq delims=" %%a in ("in.txt") do >"out.txt" echo/%%a& goto :eof
Спасибо, пошол применять aa

[Цитировать]

    loban_ser
  • 17796
  • Стаж: 6 лет 10 месяцев
  • Сообщений: 577
  • Репутация:24

    [+] [-]
95079for /f "tokens=4" %%a in ('%WIMLIB% info --header %WIM%^| find "Image Count"') do echo %%a
aa
За это благодарю, лень справку по WIMLIB было читать, хотя и так работает
for /f "tokens=3" %%a in ('%WIMLIB% info %WIM% ^| find "Image Count"') do echo %%a
делал как-то код для удаления ярлыков Office из сборки SmokieBlahBlah
@echo off
cd /d %~dp0
set "_mask=Access PowerPoint Publisher"
for %%i in (%_mask%) do set _end=%%i
If "%~1" == "" goto :check
for /f "tokens=4" %%a in ('wimlib-imagex.exe info --header "%~1"^| find "Image Count"') do set "ind=%%a"
If /i Not "%~1"=="%~dp1_OFFICE.ESD" (2>nul (for /f "tokens=2 delims=: " %%a in ('wimlib-imagex.exe info "%~1" ^| find /i "Index:"') do for /f %%c in ('wimlib-imagex.exe info "%~1" "%%a" ^| findstr /ic:"Office"') do call :dlnk %%a %~1))
rem wimlib-imagex.exe optimize "%~1" --recompress --compress=LZMS:100 --solid
pause
goto :eof
:check
for %%b in ("*.esd") do If /i Not "%%b"=="_OFFICE.ESD" (
for /f "tokens=4" %%a in ('wimlib-imagex.exe info --header "%%b"^| find "Image Count"') do set "ind=%%a"
2>nul (for /f "tokens=2 delims=: " %%a in ('wimlib-imagex.exe info "%%b" ^| find /i "Index:"') do for /f %%c in ('wimlib-imagex.exe info "%%b" "%%a" ^| findstr /ic:"Office"') do call :dlnk %%a %%b)
rem wimlib-imagex.exe optimize %%b --recompress --compress=LZMS:100 --solid
)
pause
goto :eof
:dlnk
if "%in%"=="%1" exit /b
If not DEFINED f echo File %2&&echo.
If not %2==%f% echo File %2&&echo.
echo Index:%1 from %ind%
for %%c in (%_mask%) do (
If "%%c"=="%_end%" (
wimlib-imagex.exe dir "%2" %1 --path="\ProgramData\Microsoft\Windows\Start Menu\Programs\%%c.lnk" >nul&&^
wimlib-imagex.exe update "%2" %1 --rebuild --force --command="delete --recursive '\ProgramData\Microsoft\Windows\Start Menu\Programs\%%c.lnk'"||^
echo No found %%c.lnk
) Else (
wimlib-imagex.exe dir "%2" %1 --path="\ProgramData\Microsoft\Windows\Start Menu\Programs\%%c.lnk" >nul&&^
wimlib-imagex.exe update "%2" %1 --force --command="delete --recursive '\ProgramData\Microsoft\Windows\Start Menu\Programs\%%c.lnk'"||^
echo No found %%c.lnk
)
)
set in=%1&set f=%2&echo.
exit /b

[Цитировать]

    dimo70
  • 17296
  • Стаж: 7 лет
  • Сообщений: 3787
  • Репутация:27

    [+] [-]
  • Откуда: BG
Кто нибудь знает батник или другой простой способ заблокировать предложение и возможность для апгрейда Windows 10 21H2 до Windows 11, но чтоб не затрагивались обычные апдейты десятки?
В сети есть описание через реестр, но не могу написать командный скрипт.
ЗЯ Попробовал сам написать батник:
@echo off
>nul dism||(Powershell -Command Start-Process \"%~0\" -verb RunAs & exit)
reg add HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate /v TargetReleaseversion /t REG_DWORD /d 1 /f
reg add HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate /v TargetReleaseversionInfo /t REG_SZ /d 21H2 /f
timeout /t 4
Правильно ли сделал?
Добавлено через 37 минут 30 секунд:
BlockWin11

_________________
Подпись отключена за нарушение правил форума

[Цитировать]

    Gvint64
  • 24573
  • Стаж: 4 года 7 месяцев
  • Сообщений: 626
  • Репутация:72

    [+] [-]
dimo70, aa
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v  "TargetReleaseversion" /t REG_DWORD /d "1" /f
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v  "TargetReleaseversionInfo" /t REG_SZ /d "21H2" /f

[Цитировать]

    dimo70
  • 17296
  • Стаж: 7 лет
  • Сообщений: 3787
  • Репутация:27

    [+] [-]
  • Откуда: BG
Gvint64, странно, у меня тоже работает нормально.

_________________
Подпись отключена за нарушение правил форума

[Цитировать]

    Gvint64
  • 24573
  • Стаж: 4 года 7 месяцев
  • Сообщений: 626
  • Репутация:72

    [+] [-]
dimo70, У меня так - батник работает - а вот ехе отрабатывает но в реестре нет изменений.Упаковал по новому
У тебя SFX x86 упакован и устанавливает сюда:
[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Policies\Microsoft\Windows\WindowsUpdate]

[Цитировать]

    dimo70
  • 17296
  • Стаж: 7 лет
  • Сообщений: 3787
  • Репутация:27

    [+] [-]
  • Откуда: BG
Gvint64, понял, исправлю. ay az
Можешь проверить? aa
BlockWin11.exe

_________________
Подпись отключена за нарушение правил форума

[Цитировать]

    Gvint64
  • 24573
  • Стаж: 4 года 7 месяцев
  • Сообщений: 626
  • Репутация:72

    [+] [-]
dimo70, Теперь работает-такой же в моём сообщении выше.

[Цитировать]

    dimo70
  • 17296
  • Стаж: 7 лет
  • Сообщений: 3787
  • Репутация:27

    [+] [-]
  • Откуда: BG
Gvint64, извини дружище, не заметил. Главное сработала полезность. az
А то что получается. На сервис ставлю винду 10. Через время приходят с 11 (нажимают там на кнопочку) и потом ничего толком не работает нормально. aq
Приходиться заного переставлять. ag
Сейчас заблокирую и все! Винда 11 прямо разозлила уже.

_________________
Подпись отключена за нарушение правил форума

[Цитировать]

    cartmenezz
  • 1384
  • Стаж: 9 лет 3 месяца
  • Сообщений: 527
  • Репутация:14

    [+] [-]
  • Откуда: Калининград
Приветствую aa
Столкнулся с задачкой:
1. Имеется текстовый вывод от команды, длинной, как правило, несколько тысяч строк
2. Нужно найти определенные строки и получить их части
3. Проблема в том, что в нужных строках нет уникальности, по которой их можно опознать
4. Но заметил такую тенденцию - двумя позициями выше есть строка уникального формата
5. Можно ли как-то осуществить поиск, чтобы после нахождения строки по определенной "фразе", брать в обработку строку, находяююся в двух позициях ниже?

кусок из файла

E: activity (line=288)
        A: android:theme(0x01010000)=@0x7f1301ab
        A: android:name(0x01010003)="com.mxtech.videoplayer.ad.ActivityPrivacyMX" (Raw: "com.mxtech.videoplayer.ad.ActivityPrivacyMX")
        A: android:configChanges(0x0101001f)=(type 0x11)0x400
      E: activity (line=292)
        A: android:theme(0x01010000)=@0x7f1302fd
        A: android:name(0x01010003)="com.mxtech.videoplayer.ad.online.tab.CricketWebViewActivity" (Raw: "com.mxtech.videoplayer.ad.online.tab.CricketWebViewActivity")
        A: android:screenOrientation(0x0101001e)=(type 0x10)0x1
      E: activity (line=296)
        A: android:theme(0x01010000)=@0x7f1302fd
        A: android:name(0x01010003)="com.mxtech.videoplayer.ad.OnlineUsbActivityMediaList" (Raw: "com.mxtech.videoplayer.ad.OnlineUsbActivityMediaList")
        A: android:configChanges(0x0101001f)=(type 0x11)0x4a0
      E: activity (line=300)
        A: android:theme(0x01010000)=@0x7f1302fd
        A: android:name(0x01010003)="com.mxtech.videoplayer.ad.online.tab.BehindWebViewActivity" (Raw: "com.mxtech.videoplayer.ad.online.tab.BehindWebViewActivity")
        A: android:screenOrientation(0x0101001e)=(type 0x10)0x3
      E: activity (line=310)
        A: android:theme(0x01010000)=@0x7f1301ab
        A: android:name(0x01010003)="com.mxtech.videoplayer.ad.ActivityMediaList" (Raw: "com.mxtech.videoplayer.ad.ActivityMediaList")
        A: android:exported(0x01010010)=(type 0x12)0x0
        A: android:launchMode(0x0101001d)=(type 0x10)0x1
        A: android:configChanges(0x0101001f)=(type 0x11)0x2ffc
        A: android:windowSoftInputMode(0x0101022b)=(type 0x11)0x3

Что нужно искать

E: activity (line=288)
A: android:theme(0x01010000)=@0x7f1301ab
A: android:name(0x01010003)="com.mxtech.videoplayer.ad.ActivityPrivacyMX" (Raw: "com.mxtech.videoplayer.ad.ActivityPrivacyMX")
A: android:configChanges(0x0101001f)=(type 0x11)0x400
E: activity (line=292)
A: android:theme(0x01010000)=@0x7f1302fd
A: android:name(0x01010003)="com.mxtech.videoplayer.ad.online.tab.CricketWebViewActivity" (Raw: "com.mxtech.videoplayer.ad.online.tab.CricketWebViewActivity")
A: android:screenOrientation(0x0101001e)=(type 0x10)0x1
E: activity (line=296)
A: android:theme(0x01010000)=@0x7f1302fd
A: android:name(0x01010003)="com.mxtech.videoplayer.ad.OnlineUsbActivityMediaList" (Raw: "com.mxtech.videoplayer.ad.OnlineUsbActivityMediaList")
A: android:configChanges(0x0101001f)=(type 0x11)0x4a0
E: activity (line=300)
A: android:theme(0x01010000)=@0x7f1302fd
A: android:name(0x01010003)="com.mxtech.videoplayer.ad.online.tab.BehindWebViewActivity" (Raw: "com.mxtech.videoplayer.ad.online.tab.BehindWebViewActivity")
A: android:screenOrientation(0x0101001e)=(type 0x10)0x3
E: activity (line=310)
A: android:theme(0x01010000)=@0x7f1301ab
A: android:name(0x01010003)="com.mxtech.videoplayer.ad.ActivityMediaList" (Raw: "com.mxtech.videoplayer.ad.ActivityMediaList")
A: android:exported(0x01010010)=(type 0x12)0x0
A: android:launchMode(0x0101001d)=(type 0x10)0x1
A: android:configChanges(0x0101001f)=(type 0x11)0x2ffc
A: android:windowSoftInputMode(0x0101022b)=(type 0x11)0x3
Собственно, нужно искать строки с "activity (line=" и потом обрабатывать строку двумя позициями ниже.
(предполагаю, что потом придется еще работать с большим колличеством дублей, так как в полученном выводе команды нашлось около двухсот упоминаний "activity (line=", а должно быть около 30ти,.. но это уже потом)
...
Задача поддается решению средствами командной строки?
+++ update +++
Вроде что-то начало получаться (использовал findstr с ключом /N чтобы получить номера строк, потом прибавлял единицу и планировал использовать как колличество строк для пропуска в цикле for), но потом заметил, что иногда строка с "android:theme" опущена, поэтому не всегда нужная строка будет двумя позициями ниже... так что, наверное, отбой...
+++ update 2 +++
Пришла идея:
for /f "delims=" %%A in ('type Manifest.txt^| findstr /ir "activity.(line= (Raw:"') do echo %%A>>Manifest_mod.txt
пересохраняем в новый файл только те строки, где есть один из двух нужных кусков, при этом порядок не нарушается, так что искомый кусок всегда будет в следующей строке, после той где "activity (line=" (в теории)
...
с этим уже можно работать
...
Блин, а ведь использовать кавычки в качестве разделителя в цикле не получается. Нашел такой вариант решения:
for /f "delims=" %%i in (text.txt) do (
  set V=%%i
  call set V=%%V:"=µ%%
  for /f "tokens=2 delims=µ" %%a in ('call echo.%%V%%') do echo %%a
)
Вроде работает стабильно, в отличие от другого найденного варианта: for /f delims^=^"^ tokens^=1 ... - это у меня нормально не заработало.. может не со всеми сочетаниями ключей срабатывает, мне ведь еще нужен skip

[Цитировать]

    Ander_73
  • 15549
  • Стаж: 7 лет 10 месяцев
  • Сообщений: 3868
  • Репутация:127

    [+] [-]
95526это у меня нормально не заработало
Что это значит?
set "var=123"456"789"
for /f tokens^=^2^ delims^=^" %%a in ("%var%") do echo %%a
выводит 456, как и положено.

[Цитировать]

    cartmenezz
  • 1384
  • Стаж: 9 лет 3 месяца
  • Сообщений: 527
  • Репутация:14

    [+] [-]
  • Откуда: Калининград
95531Что это значит?
Уже была поздняя ночь, когда я с этим столкнулся, но вроде как уверен что не работало. Я именно тот найденный пример не тестировал, а сразу пытался адаптировать под свои нужды, а у меня строка ключей иная.
Готовое решение выглядит так:
@echo off
if EXIST "3_mod.txt" del /F/Q "3_mod.txt"
for /f "delims=" %%A in ('type 3.txt^| findstr /ir "activity.(line= android:name"') do echo %%A>>3_mod.txt
for /f "delims=:" %%A in ('type 3_mod.txt^| findstr /INC:"activity (line="') do (
set "n=%%A"
call :22
)
echo.
pause
exit
:22
for /f "skip=%n% delims=" %%A in (3_mod.txt) do (
set "V=%%A"
call set V=%%V:"=µ%%
for /f "tokens=2 delims=µ" %%a in ('call echo.%%V%%') do echo %%a
exit /b
)
Прописать кавычки в виде разделителя вторым способом не удалось, пробовал и переставлять ключи... вроде бы один раз получилось, но только когда я убирал какой-то из ключей... надо еще попробовать на свежую голову, раз уж вы говорите что способ рабочий))
+++
https://dropmefiles.com/vP0ky - вот архив с файлом 3.txt

[Цитировать]

    cartmenezz
  • 1384
  • Стаж: 9 лет 3 месяца
  • Сообщений: 527
  • Репутация:14

    [+] [-]
  • Откуда: Калининград
Приветствую aa
Застрял на одном моменте, нужно выполнить действия при соблюдении двух условий, но второе условие имеет вариации.
Нужно разобрать в цикле два токена, и выполнить действия, если превый токен имеет конкретное значение, а второй (вернее его часть) имеет значение из определенного списка допустимых.
Если одно из условий не соблюдено, нужно выполнить другие действия.
...
Собственно, сейчас у меня все работает, вот так:
for /f "..." %%A in (...) do (
  if "%%A"=="..." (
    ...
    set "file_ext=%%~xB"
    ...
  ) ELSE GoTo :error
)
if /i not "%file_ext%"==".ext1" if /i not "%file_ext%"==".ext2" ^
if /i not "%file_ext%"==".ext3" if /i not "%file_ext%"==".ext4" GoTo :error
:error
...
...
...
...
но мне бы хотелось уйти от GoTo, но и дублировать список действий не хочется... душа требует краткости))
нужно как-то привести к такому виду:
for /f "..." %%A in (...) do (
  if "%%A"=="..." и "%%xB"=="одному_из_значений" (
    ...
    ...
    ...
  ) ELSE (
    ...
    ...
    ...
  )
)
...
не удивлюсь, если меня тут засмеют, мол это первый класс, но что-то я не могу додумать

[Цитировать]

    Ander_73
  • 15549
  • Стаж: 7 лет 10 месяцев
  • Сообщений: 3868
  • Репутация:127

    [+] [-]
set var=& for %%f in (ext1 ext2 ext3 ext4) do if %%~xB==.f%% set var=1
if defined var ...
Задать/считать значение переменной внутри for можно только при заданном EnableExpansion. А вот defined работает всегда.
Если вы понимаете, о чём я... be

Страница 73 из 94


Показать сообщения:    

Текущее время: 24-Дек 20:20

Часовой пояс: UTC + 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы можете скачивать файлы