我有以下代码,有人给了我但我不知道如何将它放在一个bat文件中,以便它成功运行。
目的是在c:/中找到最新的(最后修改过的)文件,并将其与c:/2.txt进行比较,并将差异输出到c:/786.txt
cd /d c:\
for /f %%a in ('dir /b /o-d /a-d /tw') do (set latest=%%a & goto :eof)
for /f "tokens=1*" %%a in (
'diff c:\%latest% c:\2.txt ^| findstr /r /c:"^<" /c:"^>"'
) do @echo %%b >>c:\786.txt
有人可以帮我把这段代码放在一起。
答案 0 :(得分:1)
cd /d c:\
set "latest="
for /f %%a in ('dir /b /o-d /a-d /tw') do (set "latest=%%a" & goto :found)
:found
if not defined latest exit /b
for /f "tokens=1,*" %%a in (
'diff "c:\%latest%" "c:\2.txt" ^| findstr /r /c:"^<" /c:"^>"'
) do (
>> "c:\786.txt" echo(%%b
)
按日期降序排序,最新文件是第一个,因此在第一次迭代时分配文件名并退出for
循环。
然后检查是否找到了任何文件。它不是,脚本的结尾
如果我们有一个文件,请将最新文件与指定文件进行比较,然后将过滤后的行发送到最终文件。
编辑 - 重构代码以使其更有用并适应评论。搜索文件夹中的最后一个文件移动到子例程。
@echo off
setlocal enableextensions disabledelayedexpansion
call :getLatestFileInFolder "c:\" latestC
call :getLatestFileInFolder "d:\" latestD
if not defined latestC ( echo NO File in C & exit /b )
if not defined latestD ( echo NO File in D & exit /b )
for /f "tokens=1,*" %%a in (
'diff "%latestC%" "%latestD%" ^| findstr /r /c:"^<" /c:"^>"'
) do (
>> "c:\786.txt" echo(%%b
)
endlocal
exit /b
:getLatestFileInFolder folderToSearch variableToReturn
setlocal
set "folder=%~1" & if not defined folder set "folder=%cd%"
set "latest="
pushd "%folder%"
for /f "tokens=*" %%a in ('dir /b /o-d /a-d /tw 2^>nul') do (set "latest=%%~fa" & goto :latestFileFound)
:latestFileFound
popd
endlocal & set "%~2=%latest%" & goto :eof