找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 68843|回复: 20

[文本处理] 批处理如何查询文件名

[复制链接]
发表于 2020-6-6 09:11:01 | 显示全部楼层 |阅读模式
Remove.txt
Containers-Server-Package

if exist "%MT%\Windows\servicing\Packages\%%i.mum"
%%i都是这样的形式,多出以~开头的
Containers-Server-Package~31bf3856ad364e35~amd64~~10.0.18362.418
其中10.0.18362.418可变,不一定这个值

我大概写一下思路
  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. )
复制代码
但不行的,dism /Packagename:必须是定值
发表于 2020-6-6 13:38:25 | 显示全部楼层
本帖最后由 flashercs 于 2020-6-6 14:49 编辑
  1. for /f "delims=" %%i in (Remove.txt) do (
  2.        for %%A in ("%MT%\Windows\servicing\Packages\%%i~*.mum") do %dism% /NoRestart /image:%MT% /Remove-package /Packagename:"%%~nA"
  3. )
复制代码
给个评分 技术+1

评分

参与人数 2技术 +2 收起 理由
hentai87 + 1 乐于助人
netdzb + 1 最好解释一下代码,谢谢!

查看全部评分

 楼主| 发表于 2020-6-6 14:10:51 | 显示全部楼层
回复 2# flashercs


    Packagename:不能有.mum
发表于 2020-6-6 14:50:26 | 显示全部楼层
本帖最后由 flashercs 于 2020-6-6 14:55 编辑

回复 3# hentai87


    修改了代码,改成%%~nA
解释一下
  1. for %%A in ("%MT%\Windows\servicing\Packages\%%i~*.mum") do %dism% /NoRestart /image:%MT% /Remove-package /Packagename:"%%~nA"
复制代码
for %%A in (带有通配符*?的字符串) 是可以起到检测文件是否存在的效果的.
 楼主| 发表于 2020-6-6 14:54:12 | 显示全部楼层
回复 4# flashercs


    这样就没后面的~31bf3856ad364e35~amd64~~10.0.18362.418
结果是 Containers-ApplicationGuard-Shared-windows-Package
发表于 2020-6-6 14:58:09 | 显示全部楼层
回复 5# hentai87
  1. for %%A in ("%MT%\Windows\servicing\Packages\%%i~*.mum") do echo "%%~nA"
复制代码
改成这样会输出什么结果?看看
 楼主| 发表于 2020-6-6 15:41:41 | 显示全部楼层
本帖最后由 hentai87 于 2020-6-6 16:07 编辑

回复 6# flashercs


我关了echo off,看了详细过程,是对的,提示不准确
问题出在前面修改注册表的步骤,没修改对

我适当改了下,失败了,似乎不识别%%~nA
结果是HKLM\SOFT\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages\%~nA

::-------------卸载系统包
for /f "delims=" %%i in (Remove.txt) do (
        for %%A in ("%MT%\Windows\servicing\Packages\%%i~*.mum") do (
        reg load HKLM\SOFT "%MT%\Windows\System32\config\software"
        call :SETVALUE %%~nA
        reg unload HKLM\SOFT
        %dism% /NoRestart /image:%MT% /Remove-package /Packagename:"%%~nA"
  )
)

pause
exit

::-------------修改注册表
:SETVALUE
echo.
echo 修改Visibility
reg add "HKLM\SOFT\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages\%%~nA" /v Visibility /t REG_DWORD /d 1 /f
echo.
echo 删除Owners
reg delete "HKLM\SOFT\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages\%%~nA\Owners" /f
goto:eof
发表于 2020-6-6 15:53:58 | 显示全部楼层
回复 7# hentai87


    你应该去看论坛教程 关于for的
发表于 2020-6-6 16:07:04 | 显示全部楼层
回复 7# hentai87

楼主是干运维的吧,这段维护脚本在干什么?
 楼主| 发表于 2020-6-6 16:10:44 | 显示全部楼层
回复 8# flashercs
我两个地方加了echo %%~nA,第一个成功了,后面的失败了
似乎for里不能call?

    for /f "delims=" %%i in (Remove.txt) do (
        for %%A in ("%MT%\Windows\servicing\Packages\%%i~*.mum") do (
        reg load HKLM\SOFT "%MT%\Windows\System32\config\software"
        echo %%~nA
        call :SETVALUE %%~nA
       
        reg unload HKLM\SOFT
        %dism% /NoRestart /image:%MT% /Remove-package /Packagename:"%%~nA"
  )
)
pause
exit

:SETVALUE
echo %%~nA
echo.
echo 修改Visibility
reg add "HKLM\SOFT\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages\%%~nA" /v Visibility /t REG_DWORD /d 1 /f
echo.
echo 删除Owners
reg delete "HKLM\SOFT\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages\%%~nA\Owners" /f
goto:eof
 楼主| 发表于 2020-6-6 16:11:31 | 显示全部楼层
回复 9# netdzb


    修改系统
发表于 2020-6-6 16:20:08 | 显示全部楼层
回复 2# flashercs


    这里的代码是什么含义?没有看懂,谢谢!   === 》 这个地方 %%i~*.mum
 楼主| 发表于 2020-6-6 16:59:36 | 显示全部楼层
本帖最后由 hentai87 于 2020-6-6 17:07 编辑

这样就行了,但是效率很低,每次都要reg load,reg unload
但是确实需要在Remove-package 之前修改注册表
求大佬给一个效率更高的办法

for /f "delims=" %%i in (Remove.txt) do (
        for %%A in ("%MT%\Windows\servicing\Packages\%%i~*.mum") do (
        reg load HKLM\SOFT "%MT%\Windows\System32\config\software"
        echo %%~nA
        reg add "HKLM\SOFT\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages\%%~nA" /v Visibility /t REG_DWORD /d 1 /f
        reg delete "HKLM\SOFT\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages\%%~nA\Owners" /f
        reg unload HKLM\SOFT
        %dism% /NoRestart /image:%MT% /Remove-package /Packagename:"%%~nA"
  )
)
pause
发表于 2020-6-6 17:41:06 | 显示全部楼层
回复 12# netdzb


    %%i是Remove.txt中的一行
发表于 2020-6-6 17:57:08 | 显示全部楼层
本帖最后由 flashercs 于 2020-6-6 17:58 编辑

回复 13# hentai87


    你可以reg load 一次就行 修改完后再unload
  1.         reg load HKLM\SOFT "%MT%\Windows\System32\config\software"
  2. for /f "delims=" %%i in (Remove.txt) do (
  3.         for %%A in ("%MT%\Windows\servicing\Packages\%%i~*.mum") do (
  4.         echo %%~nA
  5.         reg add "HKLM\SOFT\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages\%%~nA" /v Visibility /t REG_DWORD /d 1 /f
  6.         reg delete "HKLM\SOFT\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages\%%~nA\Owners" /f
  7.         %dism% /NoRestart /image:%MT% /Remove-package /Packagename:"%%~nA"
  8.   )
  9. )
  10.         reg unload HKLM\SOFT
  11. pause
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 20:35 , Processed in 0.021981 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表