我在文件夹中有大约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
提前致谢
答案 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"
)
)
命令以及它为匹配文件设置fc
到ErrorLevel
的事实,否则设置为0
。 1
构成条件命令分隔符,仅在非零||
(也称为退出代码或返回代码)的情况下执行下一个命令。
比较在文本模式下完成。要将其更改为二进制模式,请将ErrorLevel
替换为fc /L
。
重定向fc /B
可以避免> nul
(如fc
,Comparing files [...]
)或FC: no differences encountered
(如move
)的任何消息。如果您想在屏幕上看到sch消息,请将1 file(s) moved.
替换为> nul
。
要在之后移动收集的已修改文件,请在批处理脚本中使用以下命令行:
> con