Board logo

标题: [文本处理] 【已解决】批处理怎么查A文本中的文本是否在B文本中 [打印本页]

作者: hentai87    时间: 2020-6-4 17:27     标题: 【已解决】批处理怎么查A文本中的文本是否在B文本中

本帖最后由 hentai87 于 2020-6-4 20:11 编辑

Remove.txt 中的文本不在Packages.txt,
则不执行for /f %%i in ('findstr /i . Remove.txt 2^>nul') do %dism% /NoRestart /image:%MT% /Remove-package /Packagename:"%%i"
代码已标出有问题部分
pushd "%~dp0"

::-------------设置win路径和dism路径

for /f "delims=:" %%a in ('findstr /n msmg设置 ..\set.txt') do set n=%%a
        for /f "skip=%n% delims=" %%b in (..\set.txt) do (
set MT=%%b\Mount\Install
set dism=%%b\Bin\x64\DISM10\dism.exe
)
::-------------加载卸载注册表
:SETR
echo.
echo 载入注册表
reg load HKLM\SOFT "%MT%\Windows\System32\config\software"

for /f %%i in ('findstr /i . Remove.txt 2^>nul') do ( call :SETVALUE %%i )

echo.
echo 卸载注册表完成
reg unload HKLM\SOFT

::-------------卸载系统包(   有疑问的部分    )
dir /b %MT%\Windows\servicing\Packages\*.mum >Packages.txt
for /f %%i in ('findstr /i . Remove.txt 2^>nul') do %dism% /NoRestart /image:%MT% /Remove-package /Packagename:"%%i"
pause
exit


::-------------修改注册表
:SETVALUE
echo.
echo 修改Visibility
reg add "HKLM\SOFT\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages\%~1" /v Visibility /t REG_DWORD /d 1 /f
echo.
echo 删除Owners
reg delete "HKLM\SOFT\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages\%~1\Owners" /f
goto:eof[/code]
作者: hentai87    时间: 2020-6-4 18:55

本帖最后由 hentai87 于 2020-6-4 19:01 编辑

自己写了个, 没成功
果然这种又要查又要执行N次的代码不知道其逻辑关系

dir /b %MT%\Windows\servicing\Packages\*.mum >ackages.txt
for /f "delims=" %%i in ('findstr /gackages.txt /x Remove.txt 2^>nul') do (
for /f %%i in ('findstr /i . Remove.txt 2^>nul') do %dism% /NoRestart /image:%MT% /Remove-package /Packagename:"%%i"
)


因为要执行几百次,所以想加个判断,免去不必要的执行
不知道省去生成Packages.txt,会不会更加再快一点

作者: flashercs    时间: 2020-6-4 19:19

回复 2# hentai87


    是判断packages 在remove中还是反过来?
作者: hentai87    时间: 2020-6-4 19:24

回复 3# flashercs


    判断remove在packages中
作者: flashercs    时间: 2020-6-4 19:28

回复 4# hentai87
  1. for /f "delims=" %%i in (Remove.txt) do (
  2.   if exist "%MT%\Windows\servicing\Packages\%%i" %dism% /NoRestart /image:%MT% /Remove-package /Packagename:"%%i"
  3. )
复制代码
这样判断是否更简单?
作者: hentai87    时间: 2020-6-4 19:34

回复 5# flashercs

dir /b %%b\Mount\Install\Windows\servicing\Packages\*.mum >1_Get_Full_Packages.txt
Packages.txt含有.mum的多余后缀
另一个bat的这行怎么改,也要用

你的代码不知道含不含.mum,我测试了失败了
作者: flashercs    时间: 2020-6-4 19:38

本帖最后由 flashercs 于 2020-6-4 19:40 编辑

回复 6# hentai87
  1. for /f "delims=" %%i in ('dir /b "%MT%\Windows\servicing\Packages\*.mum"^|findstr /ixg:Remove.txt  2^>nul') do (
  2.   %dism% /NoRestart /image:%MT% /Remove-package /Packagename:"%%i"
  3. )
复制代码
Remove.txt的格式是什么?
a.mum
b.mum
...
作者: hentai87    时间: 2020-6-4 19:48

本帖最后由 hentai87 于 2020-6-4 19:51 编辑

dir /b %%b\Mount\Install\Windows\servicing\Packages\*.mum >1_Get_Full_Packages.txt
是完整的全部代码,我也想知道,直接不含.mum直接导出的办法

dir /b "%MT%\Windows\servicing\Packages\*.mum"^|findstr /ixg:Remove.txt  2^>nul
失败了
Invalid switch - "ixg:Remove.txt".
Press any key to continue . . .
作者: hentai87    时间: 2020-6-4 19:49

回复 7# flashercs

Remove.txt
Windows-Defender-Nis-Group-Package~31bf3856ad364e35~amd64~~10.0.19640.1
Windows-Defender-Management-Powershell-Group-Package~31bf3856ad364e35~amd64~~10.0.19640.1
Windows-Defender-Management-MDM-Group-Package~31bf3856ad364e35~amd64~~10.0.19640.1
Packages.txt
Windows-Defender-Management-Powershell-Group-Package~31bf3856ad364e35~amd64~~10.0.19640.1.mum
Windows-Defender-Management-MDM-Group-Package~31bf3856ad364e35~amd64~~10.0.19640.1.mum
WindowsSearchEngineSKU-Group-Package~31bf3856ad364e35~amd64~en-US~10.0.19640.1.mum

判断remove在packages中,但是packages本身有.mum多余后缀
作者: hentai87    时间: 2020-6-4 19:55

回复 7# flashercs


dism XXX Windows-Defender-amd64~~10.0.19640.1.mum
含有.mum会提示无效包,所以不能有.mum
作者: flashercs    时间: 2020-6-4 19:59

回复 9# hentai87
  1. for /f "delims=" %%i in (Remove.txt) do (
  2.   if exist "%MT%\Windows\servicing\Packages\%%i.mum" %dism% /NoRestart /image:%MT% /Remove-package /Packagename:"%%i"
  3. )
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2