Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 如何根据文件名和日期更改多个文件名_Windows_Batch File - Fatal编程技术网

Windows 如何根据文件名和日期更改多个文件名

Windows 如何根据文件名和日期更改多个文件名,windows,batch-file,Windows,Batch File,我有7个文件。在bat文件中,我想检查文件名,然后用当前日期命名。就像if/else条件一样 示例 abc.txt重命名为xyz20190715_1.txt(xyzyyymmd_1.txt) pqr.txt重命名为def20190715_1.txt(defyyyymmdd_1.txt) 我是批处理文件的新手,尝试了以下方法: for /f "tokens=1-5 delims=/ " %%d in ("%date%") do rename "abc.txt" %%e-%%f-%%g.dat

我有7个文件。在bat文件中,我想检查文件名,然后用当前日期命名。就像
if
/
else
条件一样

示例

  • abc.txt
    重命名为
    xyz20190715_1.txt
    (xyzyyymmd_1.txt)
  • pqr.txt
    重命名为
    def20190715_1.txt
    (defyyyymmdd_1.txt)
  • 我是批处理文件的新手,尝试了以下方法:

     for /f "tokens=1-5 delims=/ " %%d in ("%date%") do rename
     "abc.txt" %%e-%%f-%%g.dat
    
    预期产出

  • abc.txt
    重命名为
    xyz20190715_1.txt

  • pqr.txt
    重命名为
    def20190715_1.txt


  • 如果问题是获取实际日期,那么对于今天的日期,最好执行以下操作:

    for /f %%a in ('wmic path win32_LocalTime Get Day^,Month^,Year /value') do >nul set "%%a"
        set Month=00%Month%
        set Month=%Month:~-2%
        set Day=00%Day%
        set Day=%Day:~-2%
    set today=%Year%%Month%%Day%
    
    否则,您需要问一个真正的问题,这个问题以“我如何”开头。“循环浏览文件”类似于

    for %%I in (*.txt) do echo %%I
    
    这就是为什么我问如何知道替换

    由于似乎没有规则,您必须单独重命名每个文件(只有7个文件没有大的危害,但如果有100多个文件,这会让您发疯)。我还使用了不同的方法来获取日期字符串(与区域设置无关):


    所需格式有一个名称。文件名中的日期-时间格式为yyyymmdd,但名称开头有一些硬编码文本,即stackoverflow20190715.TXT
    xyz
    def
    来自何处?因为我们看不到代码在您的系统上的作用,您需要告诉我们。您还应该通过显示值为
    %date%
    的示例来指定所使用的日期格式。xyz和def是示例名称,应该包含在文件名的开头。我知道,它是什么,但它来自何处?它需要批量进行编码file@PrakashMhasavekar,上面的代码使用
    \u x.DAT
    ,就像你的评论一样。如果您想使用问题中的
    \u 1.txt
    ,请根据需要调整
    7行。如何以相同格式获取下一个日期。我正在尝试使用+1进行添加,但它在纯批处理中不可行,但我建议使用其他语言(如Powershell)来保持您的理智完整。问题是我的一个文件带有第二天的日期DPR_ddmmyy格式,第二个文件带有当前的日期脚本_ddmmyy。我设法找到并重命名了脚本_ddmmyy,它随当前日期一起出现。现在还有一个明天的文件…不客气。顺便说一句:不要弄乱系统变量
    %date%
    -选择另一个名称(如
    %moother%
    @echo off
    for /f "tokens=2 delims==" %%I in ('wmic os get localdatetime /format:list') do set "datetime=%%I"
    set "datetime=%datetime:~0,8%"
    
    ren "contract.txt" "DNSM%datetime%_x.DAT"
    ren "security.DAT"" "NSM%datetime%_x.DAT"
    ren "Participant.txt" "PM%datetime%_x.DAT"
    ren "SCRIP_master.txt" "BSM%datetime%_x.DAT"
    ren "DPRxxxx" "BSE_YearlyHL%datetime%_x.DAT"
    ren "fo_participant.txt" "DPM%datetime%_x.DAT"
    ren "spd_ contract.txt" "SCM%datetime%_x.DAT"
    
    @echo off
    
    for /f "usebackq" %%B in (`"powershell (Get-Date).ToString('yyyyMMdd')"`) do set "datetime=%%B
    
    
    echo Today's Date %datetime%
    ren "contract.txt" "DNSM%datetime%_x.DAT"
    ren "security.DAT"" "NSM%datetime%_x.DAT"
    ren "Participant.txt" "PM%datetime%_x.DAT"
    ren "SCRIP_master.txt" "BSM%datetime%_x.DAT"
    ren "DPRxxxx" "BSE_YearlyHL%datetime%_x.DAT"
    ren "fo_participant.txt" "DPM%datetime%_x.DAT"
    ren "spd_ contract.txt" "SCM%datetime%_x.DAT"
    
    pause
    exit