Batch file 如何使用动态值查找和替换文件夹中的所有文件
我有一些html文件,需要在其中添加pagename作为标记值。有很多工具可以进行批量查找和替换,但是您只能使用静态文本,而我需要添加实际的文件名 它在单个文件上运行得非常好,但如果我开始循环到一个目录,它就会出错,我无法找出哪里出了问题 在单个预定义文件上执行此操作的效果与预期一样:Batch file 如何使用动态值查找和替换文件夹中的所有文件,batch-file,Batch File,我有一些html文件,需要在其中添加pagename作为标记值。有很多工具可以进行批量查找和替换,但是您只能使用静态文本,而我需要添加实际的文件名 它在单个文件上运行得非常好,但如果我开始循环到一个目录,它就会出错,我无法找出哪里出了问题 在单个预定义文件上执行此操作的效果与预期一样: @echo off&setLocal enableDELAYedexpansion rem创建tmp文件以存储修改后的信息 设置tmpFile=%CD%\test\tmp.txt 设置myFile=%CD%\te
@echo off&setLocal enableDELAYedexpansion
rem创建tmp文件以存储修改后的信息
设置tmpFile=%CD%\test\tmp.txt
设置myFile=%CD%\test\test.html
设置页面=测试
rem删除当前tmp文件
如果存在“%tmpFile%”删除/f/q“%tmpFile%”
rem查找和替换值
set search=“容器”
设置replace=“容器”
rem循环所有行并替换有问题的字符串
对于(%myFile%)中的/F“令牌=*”%%a,请执行以下操作(
设置myline=%%a
设置myline=!myline:%search%=%replace%!
echo!myline!>>%tmpFile%
)
rem使用更新的内容更新当前文件
类型tmpFile!>!我的文件!
)
暂停
上面的代码很好地找到了我的字符串,并将其替换为我想要的字符串(尽管在本例中仍然是静态的)
但是,如果我想让同样的逻辑在更多的文件中循环,那就错了。这是我使用的代码:
@echo off&setLocal enableDELAYedexpansion
rem创建tmp文件以存储修改后的信息
设置tmpFile=%CD%\test\tmp.txt
rem切换到测试文件夹
cd%cd%/测试
rem启动循环
对于(*.html)中的/R%%F,请执行以下操作(
rem获取页面名称
设置页面=%%~nxF
设置MyFile=%%F
rem删除当前tmp文件
如果存在“%tmpFile%”删除/f/q“%tmpFile%”
rem查找和替换值
set search=“容器”
设置replace=“容器”
rem循环所有行并替换有问题的字符串
对于(%%F)do中的/F“令牌=*”%%a(
设置myline=%%a
设置myline=!myline:%search%=%replace%!
echo!myline!>>%tmpFile%
)
rem使用更新的内容更新当前文件
键入!tmpFile!>!myFile!
)
暂停
这基本上没有任何作用,我一直在尝试一些Other变体,但这些变体会导致空页面或包含myLines=作为文本字符串的页面
我在这里俯瞰什么
[编辑区]
我已经设法让它部分工作,但有奇怪的不想要的副作用
不使用搜索/替换参数,而是直接在替换零件中使用它,如下所示:
for /F "tokens=*" %%a in (%%F) do (
set myLines=%%a
set "myLines=!myLines:container=container_%%~nF!"
echo !myLines! >> %tmpFile%
)
正如我所希望的那样,这将容器替换为container_pagename,但它还删除了我的htm上的所有标记,这非常烦人,因为它会破坏页面上的所有注释
so <!-- comment -->
becomes <-- comment -->
so
变成
有没有线索说明哪里出了问题,或者为什么使用参数对我不起作用
type !inputfile! > !tmpFile!
可能是个问题。建议你考虑一下它的作用……
我也会改变
set var="value"
到
第一个为
var
赋值;第二个确保线路上的杂散间谍不包括在分配给var
的value
中,感谢您从我这边发现、粘贴坏拷贝。类型行基本上将tmp内容复制到原始文件。
set "var=value"