2015-12-14 41 views
0

我有一个文件夹中的一些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

我看到两种方法:1)首先检查文件是否包含单词与find命令来替换。然后或者移动文件不变或通过repl运行它。 2)为所有文件调用repl,然后使用fc命令比较原始文件和副本 – Marged

+0

感谢您的快速响应。我是批量脚本新手,上面的代码不是我自己的。我只从本网站上购买。请详细说明 – nani

+1

SO不是'写我的代码'网站。这个想法是帮助你提出建议。你需要能够按照给出的建议 – Marged

回答

0

要简单地找出哪些文件实际上已经体改,相对于它们的内容只有,您可以使用下面的代码片段,它收集的所有修改过的文件日志文件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命令,它设置ErrorLevel0对于m的事实原始文件,并1否则。 ||构成一个条件命令分隔符,仅在非零的情况下执行下一个命令(也称为退出代码或返回代码)。

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

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

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

for /F "delims=" %%I in ("change.log") do (move "%%~I" "\path\to\destination\") 
相关问题