我在一个文件夹中有大约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提前感谢
发布于 2015-12-16 05:53:35
要简单地找出哪些文件实际上已经被修改过,您可以使用下面的代码片段,它收集了日志文件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 (如1 file(s) moved.)的消息。如果您想在屏幕上看到sch消息,请将> nul替换为> con。
要在以后移动收集的已修改文件,请在批处理脚本中使用以下命令行:
for /F "delims=" %%I in ("change.log") do (move "%%~I" "\path\to\destination\")https://stackoverflow.com/questions/34260554
复制相似问题