使用FOR循环使用日期戳来重命名文件。收到错误消息“存在重复的文件名,或者找不到该文件。”

时间:2019-05-03 06:18:15

标签: batch-file

我正在尝试编写一个批处理文件,该文件将重命名其所在文件夹中的每个.txt文件,以在名称中包含日期戳。我得到了它应有的回声,但是当我尝试使用rename或xcopy进行相同操作时,我得到“存在重复的文件名,或者文件 找不到。”

我是刚开始批量生产的人,我不太清楚这是怎么回事。也许是一个小的语法问题?

@echo off
setlocal enabledelayedexpansion
goto :main

:main
    for /f "delims=" %%a in ('wmic OS Get localdatetime  ^| find "."') do set dt=%%a

    set YYYY=%dt:~0,4%
    set MM=%dt:~4,2%
    set DD=%dt:~6,2%
    set HH=%dt:~8,2%
    set Min=%dt:~10,2%
    set Sec=%dt:~12,2%
    set stamp=!YYYY!-!MM!-!DD!___!HH!:!Min!:!Sec!

    echo !stamp!
    echo.

    FOR %%G IN (*.txt) DO (

        echo going to rename %%~nxG
        echo it will become  !stamp!___%%~nxG
        ren %%~nxG !stamp!___%%~nxG
        echo.
    )

    pause
goto :eof

1 个答案:

答案 0 :(得分:0)

由于无效的文件名字符 (如注释中所述,这是产生错误消息的原因),这是一个示例,将它们替换为

 100: CLOCK_REALTIME_COARSE and CLOCK_MONOTONIC_COARSE
 410: CLOCK_REALTIME and CLOCK_MONOTONIC
5530: CLOCK_BOOTTIME
6630: CLOCK_PROCESS_CPUTIME_ID and CLOCK_THREAD_CPUTIME_ID

请注意,您可能需要考虑使用某种过滤系统,以防止脚本的任何后续运行都处理相同的文件,从而将其名称再增加@Echo Off SetLocal DisableDelayedExpansion Set "stamp=" For /F "Tokens=1-6Delims=/: " %%A In ('""%__AppDir__%Robocopy.exe" : : /NJH /L"' )Do If Not Defined stamp Set "stamp=%%A-%%B-%%C___%%D.%%E.%%F" If Not Defined stamp GoTo :EOF For %%A In ("*.txt")Do If "%%~xA"==".txt" (Echo(&Echo going to rename %%~nxA Echo it will become %stamp%___%%~nxA&Ren "%%~nxA" "%stamp%___%%~nxA") Pause GoTo :EOF 个字符。