批处理脚本以查找已修改文件的名称

时间:2015-12-14 05:48:06

标签: batch-file batch-processing

我在文件夹中有大约500个.txt文件。其中,大约100个文件包含我希望更改的文本。我使用下面的代码来做到这一点。

used Repl.bat and the below code:
for %%F in (*.txt) do (
type "%%F"|repl Apples Mangoes >"%%F.new"
move /y "%%F.new" "%%F"
)

由于这会搜索所有文件,因此文件会被修改。我无法知道哪些文件已被替换。

我的实际任务是更改字符串并将修改后的文件放到另一个文件夹中。 我尝试使用以下代码移动修改后的文件。但是由于所有文件都被修改了,我无能为力。

ECHO OFF
set source=C:\abc\
set destination=C:xyz\

for /F "tokens=2-4 delims=/ " %%i in ('date /t') do set yyyymmdd1=%%j"."%%i"."%%k

if exist %destination% goto GO
:GO
mkdir %destination%%yyyymmdd1%
xcopy %source%* %destination% /m/s/d/y/c/v/r
echo. 
echo Finished copying %source% to %destination%
echo.
echo Created %destination%%yyyymmdd1%
pause

提前致谢

1 个答案:

答案 0 :(得分:0)

要简单地找出实际修改过哪些文件,仅限于其内容,您可以使用以下代码段,该代码段收集日志文件{{1}中的所有已修改文件}:

change.log

这使用@echo off > "change.log" ( for %%F in ("*.txt") do ( type "%%~F" | > "%%F.new" repl Apples Mangoes > nul fc /L "%%~F" "%%~F.new" || echo "%%~F" > nul move /Y "%%~F.new" "%%~F" ) ) 命令以及它为匹配文件设置fcErrorLevel的事实,否则设置为01构成条件命令分隔符,仅在非零||(也称为退出代码或返回代码)的情况下执行下一个命令。

比较在文本模式下完成。要将其更改为二进制模式,请将ErrorLevel替换为fc /L

重定向fc /B可以避免> nul(如fcComparing files [...])或FC: no differences encountered(如move)的任何消息。如果您想在屏幕上看到sch消息,请将1 file(s) moved.替换为> nul

要在之后移动收集的已修改文件,请在批处理脚本中使用以下命令行:

> con