Batch file 批处理,在集合中使用通配符
我想在GPO中放置一个批处理文件来修改文件中的一行 我遇到的问题是每个用户的路径不同 所以,我尝试在路径中使用通配符,但它不起作用 这个蝙蝠正在工作:Batch file 批处理,在集合中使用通配符,batch-file,set,wildcard,Batch File,Set,Wildcard,我想在GPO中放置一个批处理文件来修改文件中的一行 我遇到的问题是每个用户的路径不同 所以,我尝试在路径中使用通配符,但它不起作用 这个蝙蝠正在工作: @echo off &setlocal setlocal enabledelayedexpansion set "search=test" set "replace=test2" set "textfile=%appdata%\Thunderbird\Profiles\5xu9scdm.default\prefs.js" set "ne
@echo off &setlocal
setlocal enabledelayedexpansion
set "search=test"
set "replace=test2"
set "textfile=%appdata%\Thunderbird\Profiles\5xu9scdm.default\prefs.js"
set "newfile=%appdata%\Thunderbird\Profiles\5xu9scdm.default\prefs2.js"
(for /f "delims=" %%i in (%textfile%) do (
set "line=%%i"
set "line=!line:%search%=%replace%!"
echo(!line!
))>"%newfile%"
del %textfile%
rename %newfile% prefs.js
endlocal
但是如果我在集合中使用通配符,它就不再起作用了
@echo off &setlocal
setlocal enabledelayedexpansion
set "search=test"
set "replace=test2"
set "textfile=%appdata%\Thunderbird\Profiles\*.default\prefs.js"
set "newfile=%appdata%\Thunderbird\Profiles\*.default\prefs2.js"
(for /f "delims=" %%i in (%textfile%) do (
set "line=%%i"
set "line=!line:%search%=%replace%!"
echo(!line!
))>"%newfile%"
del %textfile%
rename %newfile% prefs.js
endlocal
如何解决此问题?您的方法不起作用,因为通配符只能出现在路径的最后一个元素中。此外,
for/F
无法处理通配符。因此,您需要围绕一个for/D
循环来解析通配符,如下所示(假设只有一个匹配的目录*。默认值
):
@echo关闭
setlocal EnableExtensions DisableDelayedExpansion
设置“搜索=测试”
设置“replace=test2”
设置“rootdir=%appdata%\Thunderbird\Profiles\*.default”
设置“textfile=prefs.js”
设置“newfile=prefs2.js”
对于“%rootdir%”中的/D%%j,请执行以下操作(
>“%%~j\%newfile%”(
对于/F“usebackq delims=“%%i in”(“%%~j\%textfile%”)do(
设置“行=%%i”
setlocal EnableDelayedExpansion
设置“行=!行:%search%=%replace%”
回声(!线!
端部
)
)
>nul move/Y“%%~j\%newfile%”“%%~j\%textfile%”
)
端部
退出/B
除了插入for/D
循环之外,我还更改了什么:
- 延迟扩展在循环中切换,因此文本文件中的感叹号不会丢失
- 所有路径均正确引用;若要在
使用带引号的文件路径,需要使用中为/F
usebackq
- 通过单个
命令替换原始文件,而不是move
加del
rename
for/F
无法解析,因此需要围绕for/D
循环执行此操作…请参阅: