首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于查找已修改文件名称的批处理脚本

用于查找已修改文件名称的批处理脚本
EN

Stack Overflow用户
提问于 2015-12-14 13:48:06
回答 1查看 72关注 0票数 0

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

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

因为这样会搜索所有的文件,所以文件会被修改。我无法知道在哪些文件中,文本被替换了。

我的实际任务是更改字符串并将修改后的文件放到另一个文件夹中。我尝试使用下面的代码来移动修改后的文件。但是由于所有的文件都被修改了,我不知道该怎么做。

代码语言:javascript
复制
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

提前感谢

EN

回答 1

Stack Overflow用户

发布于 2015-12-16 05:53:35

要简单地找出哪些文件实际上已经被修改过,您可以使用下面的代码片段,它收集了日志文件change.log中所有修改过的文件

代码语言:javascript
复制
@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

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

代码语言:javascript
复制
for /F "delims=" %%I in ("change.log") do (move "%%~I" "\path\to\destination\")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34260554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档