Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 如何使用动态值查找和替换文件夹中的所有文件_Batch File - Fatal编程技术网

Batch file 如何使用动态值查找和替换文件夹中的所有文件

Batch file 如何使用动态值查找和替换文件夹中的所有文件,batch-file,Batch File,我有一些html文件,需要在其中添加pagename作为标记值。有很多工具可以进行批量查找和替换,但是您只能使用静态文本,而我需要添加实际的文件名 它在单个文件上运行得非常好,但如果我开始循环到一个目录,它就会出错,我无法找出哪里出了问题 在单个预定义文件上执行此操作的效果与预期一样: @echo off&setLocal enableDELAYedexpansion rem创建tmp文件以存储修改后的信息 设置tmpFile=%CD%\test\tmp.txt 设置myFile=%CD%\te

我有一些html文件,需要在其中添加pagename作为标记值。有很多工具可以进行批量查找和替换,但是您只能使用静态文本,而我需要添加实际的文件名

它在单个文件上运行得非常好,但如果我开始循环到一个目录,它就会出错,我无法找出哪里出了问题

在单个预定义文件上执行此操作的效果与预期一样:

@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"