标题: [文本处理] 批处理如何查询文件名 [打印本页]
作者: hentai87 时间: 2020-6-6 09:11 标题: 批处理如何查询文件名
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可变,不一定这个值
我大概写一下思路- for /f "delims=" %%i in (Remove.txt) do (
- if exist "%MT%\Windows\servicing\Packages\%%i~*.mum" %dism% /NoRestart /image:%MT% /Remove-package /Packagename:"%%i~*"
- )
复制代码
但不行的,dism /Packagename:必须是定值
作者: flashercs 时间: 2020-6-6 13:38
本帖最后由 flashercs 于 2020-6-6 14:49 编辑
- for /f "delims=" %%i in (Remove.txt) do (
- for %%A in ("%MT%\Windows\servicing\Packages\%%i~*.mum") do %dism% /NoRestart /image:%MT% /Remove-package /Packagename:"%%~nA"
- )
复制代码
给个评分 技术+1
作者: hentai87 时间: 2020-6-6 14:10
回复 2# flashercs
Packagename:不能有.mum
作者: flashercs 时间: 2020-6-6 14:50
本帖最后由 flashercs 于 2020-6-6 14:55 编辑
回复 3# hentai87
修改了代码,改成%%~nA
解释一下- for %%A in ("%MT%\Windows\servicing\Packages\%%i~*.mum") do %dism% /NoRestart /image:%MT% /Remove-package /Packagename:"%%~nA"
复制代码
for %%A in (带有通配符*?的字符串) 是可以起到检测文件是否存在的效果的.
作者: hentai87 时间: 2020-6-6 14:54
回复 4# flashercs
这样就没后面的~31bf3856ad364e35~amd64~~10.0.18362.418
结果是 Containers-ApplicationGuard-Shared-windows-Package
作者: flashercs 时间: 2020-6-6 14:58
回复 5# hentai87 - for %%A in ("%MT%\Windows\servicing\Packages\%%i~*.mum") do echo "%%~nA"
复制代码
改成这样会输出什么结果?看看
作者: hentai87 时间: 2020-6-6 15: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
作者: flashercs 时间: 2020-6-6 15:53
回复 7# hentai87
你应该去看论坛教程 关于for的
作者: netdzb 时间: 2020-6-6 16:07
回复 7# hentai87
楼主是干运维的吧,这段维护脚本在干什么?
作者: hentai87 时间: 2020-6-6 16:10
回复 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
作者: hentai87 时间: 2020-6-6 16:11
回复 9# netdzb
修改系统
作者: netdzb 时间: 2020-6-6 16:20
回复 2# flashercs
这里的代码是什么含义?没有看懂,谢谢! === 》 这个地方 %%i~*.mum
作者: hentai87 时间: 2020-6-6 16:59
本帖最后由 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
作者: flashercs 时间: 2020-6-6 17:41
回复 12# netdzb
%%i是Remove.txt中的一行
作者: flashercs 时间: 2020-6-6 17:57
本帖最后由 flashercs 于 2020-6-6 17:58 编辑
回复 13# hentai87
你可以reg load 一次就行 修改完后再unload- reg load HKLM\SOFT "%MT%\Windows\System32\config\software"
- for /f "delims=" %%i in (Remove.txt) do (
- for %%A in ("%MT%\Windows\servicing\Packages\%%i~*.mum") do (
- 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
- %dism% /NoRestart /image:%MT% /Remove-package /Packagename:"%%~nA"
- )
- )
- reg unload HKLM\SOFT
- pause
复制代码
作者: hentai87 时间: 2020-6-6 18:27
回复 15# flashercs
不行的,不先卸载注册表,一直被占用,dism会一直卡住
我改成这样了,再用一遍for
reg load HKLM\SOFT "%MT%\Windows\System32\config\software"
for /f "delims=" %%i in (Remove.txt) do (
for %%A in ("%MT%\Windows\servicing\Packages\%%i~*.mum") do (
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
for /f "delims=" %%i in (Remove.txt) do (
for %%A in ("%MT%\Windows\servicing\Packages\%%i~*.mum") do (
%dism% /NoRestart /image:%MT% /Remove-package /Packagename:"%%~nA"
)
)
pause
作者: smss 时间: 2020-6-6 19:32
回复 15# flashercs
对啊挂载一次注册表就好了嘛 改好再卸载
作者: smss 时间: 2020-6-6 19:34
回复 hentai87
楼主是干运维的吧,这段维护脚本在干什么?
netdzb 发表于 2020-6-6 16:07
感觉在修改或精减系统镜像包
作者: netdzb 时间: 2020-6-6 20:13
回复 14# flashercs
*.mum 我是在问后面的那个参数。
作者: hentai87 时间: 2020-6-12 22:30
回复 2# flashercs
我想改成以~~开头而不是~开头,怎么改,我直接for %%A in ("%MT%\Windows\servicing\Packages\%%i~~*.1.mum") do echo %%i
但是失败了
作者: Batcher 时间: 2020-6-13 08:28
回复 20# hentai87
请把你的 Remove.txt 和批处理脚本文件一起打包压缩传上来我试试
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |