【问题标题】:cmd bat file, set output file name as source filecmd bat文件,设置输出文件名为源文件
【发布时间】:2014-02-07 12:21:25
【问题描述】:

我有以下代码,它从“AX 副本”中获取最后修改的文件,并将其与“反射副本”中的最后修改文件进行比较。然后输出 Error 的差值。

我需要输出副本与“AX 副本”中的输入文件同名。我已经使用了一些东西来再次声明文件名并将其分配给输出。但是我有一个问题,在下面的代码中删除它时,它使用最旧的文件名。

请有人调整代码,使输出副本与“AX 副本”文件夹中的输入具有相同的名称。我的代码是:

@echo off
cd /d C:\Users\Important Structure\Development\AX copy
for /f %%a in ('dir /b /o-d /a-d /tw') do (set latest=%%a)

setlocal enableextensions disabledelayedexpansion

call :getLatestFileInFolder "C:\Users\Important Structure\Development\AX copy" latestC
call :getLatestFileInFolder "C:\Users\Important Structure\Development\Reflex copy" 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:\Users\Important Structure\Development\Error\%latest%" 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

【问题讨论】:

  • 我想你只需要使用%LatestC% 代替%Latest%
  • 您好,我试过了,但由于没有生成文件,所以无法正常工作

标签: variables batch-file cmd filenames


【解决方案1】:

在这一行

for /f %%a in ('dir /b /o-d /a-d /tw') do (set latest=%%a)

按日期降序列出文件中的 dir 命令。在第一次迭代(第一个文件)时,最新的文件被分配给变量,但 for 命令不会在此停止,而是继续迭代其余文件。因此,最后,变量包含文件夹中最旧的文件。

要解决它,您可以按日期升序列出文件(将/o-d更改为/od),或使用包含的子程序

call :getLatestFileInFolder "C:\Users\Important Structure\Development\AX copy" latest

随着代码的运行,这与马特向您指出的相同。 %latest%%latestC% 是同一个文件

为什么它不起作用。 diff 命令必须打开要读取的文件,因此,当 diff 锁定时,您可能无法写入文件。

要解决它,选择一个临时文件(set "tempFile=%temp%\%~nx0.tmp"),将生成的 diff 写入这个临时文件,然后将这个临时文件附加到原始文件(type "%tempFile%" &gt;&gt; "%latest%")或者如果不需要之前的内容,则覆盖它(type "%tempFile%" &gt; "%latest%")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-28
    • 1970-01-01
    • 2021-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多