龙空技术网

批处理命令--文件篇之replace

批处理进阶 48

前言:

如今兄弟们对“目标文件夹已存在此文件”大约比较看重,同学们都想要剖析一些“目标文件夹已存在此文件”的相关内容。那么小编在网摘上汇集了一些对于“目标文件夹已存在此文件””的相关资讯,希望小伙伴们能喜欢,姐妹们一起来了解一下吧!

#暑期创作大赛#

前篇我们提到了findstr这个查找字符串的命令,来回顾下。

FINDSTR的默认行为是匹配任何单词,因此FINDSTR "blue planet"将匹配单词blue或单词planet。要匹配整个短语/句子或使用正则表达式,请使用/C和/R选项。

其实默认的选项和正则之间还是有细微的差别的,如果要较真的话,个人认为并不完全是正则(可能除了正则还有部分文本模式),如在搜索\时。

findstr /l \ cc.txt

findstr \ cc.txt

findstr \\ cc.txt

findstr /r \\ cc.txt

findstr /r .\. cc.txt

findstr /r .\\. cc.txt

findstr /r \ cc.txt

前6个命令均显示一样的结果7\8.,而第7个命令运行出错:FINDSTR: No search strings,我猜想可能是因为纯正则不识别\,需要转义的缘故。

上篇findstr文末举了个例子

@echo off&echo 稍候...

for /r "MT" %%i in (*.txt) do (

for /f "tokens=1* delims=:" %%i in ('findstr/n .* %%~si')do (

echo %%i |findstr "152")

)

其实如果改下效率会更高,也会搜索更明确--显示目录和子目录下的文本文件中的152行输出到另一文本文件中

for /r "MT" %%i in (*.txt) do (

for /f "tokens=1* delims=" %%i in ('findstr/n .* %%~si ^|findstr "\<152\>"')do (

echo %%i>>33.txt)

)

pause

回归正题,这篇我们学习另一个命令replace,初看因为是Windows下的CTRL+H,其实不然,不是字符串替换,是文件替换(字符替换推荐sed)。初看觉得很鸡肋,copy类的命令一大堆,这个有新意吗?细看还真的眼前一亮,尽管有个别参数比较陈旧。

首先还是看下语法。

replace [<drive1>:][<path1>]<filename> [<drive2>:][<path2>] [/a] [/p] [/r] [/w]

replace [<drive1>:][<path1>]<filename> [<drive2>:][<path2>] [/p] [/r] [/s] [/w] [/u]

作用:替换目录中的现有文件。 如果与/a 选项一起使用,此命令会将新文件添加到目录,而不是替换现有文件。

参数

[<drive1>:][<path1>]<filename>

指定源文件或文件集的位置和名称。文件名选项是必需的,可以包含通配符(*和?) 。

[<drive2>:][<path2>]

指定目标文件的位置。 无法为替换的文件指定文件名。 如果未指定驱动器或路径,此命令将使用当前驱动器和目录作为目标。

/a (add,增加)

将新文件添加到目标目录,而不是替换现有文件。 不能将此命令行选项与/s或/u命令行选项一起使用。

/p (prompt,提示)

在替换目标文件或添加源文件之前,会提示你进行确认。

/r (read,只读)

替换只读和未受保护的文件。 如果尝试替换只读文件,但未指定/r,则会导致错误并停止替换操作--访问拒绝,没有文件被替换。加/r就不报错了。

/W(wait,等待)

等待你插入磁盘,然后开始搜索源文件。 如果未指定/w,则此命令将在按Enter 后立即开始替换或添加文件。--按任意键继续。

/s (subdirectory,子目录)

搜索目标目录中的所有子目录,并替换匹配的文件。 不能将/s与/a命令行选项一起使用。 命令不会搜索Path1中指定的子目录。

/U(update,更新)

仅替换目标目录中早于源目录中的文件。 不能将/u与/a命令行选项一起使用。

1.不能使用此命令更新隐藏文件或系统文件。意味着假如目标文件为隐藏或系统文件,不能用replace来更新;假如源文件为隐藏或系统文件,目标文件不是,可以使用replace将目标文件更新为和源文件一样的隐藏或系统文件。

2.replacing/adding,替换一定是有的才能替换,增加一定是没有的才能增加。

3.源文件(path1)的文件名选项是必需的,可以包含通配符(*和?)。目标文件不用指定,也不能指定,否则会报错找不到目录,注意path2没有文件名,只有路径。

4.注意有些参数不能同用,上面有介绍,想想就明白,同用会报错。

总的来说,replace麻雀虽小,五脏俱全,除了/w参数有些过时(软盘A早淘汰了,不知道U盘可用不),/s参数,/u参数是真心好用,/a参数相当于copy 的一部分--当目录不存在源文件时。

/s参数在更新备份的文件时特别好使,自动查找并替换多个同名文件,保持同一时间戳。

/u(update)参数相当于robocopy的/xo(exclude old)参数,相当于xcopy的/d参数(不指定日期date时)。仅替换目标目录中早于源目录中的文件。

标签: #目标文件夹已存在此文件