Powershell从文件名中删除时间戳

时间:2013-04-17 15:34:11

标签: powershell

如果我有一些名为pippo_yyyymmdd.txt,pluto_yyyymmdd.txt等的文件,我如何删除时间戳并将文件重命名为pippo.txt,pluto.txt?

2 个答案:

答案 0 :(得分:2)

尝试一下,它将删除任何下划线后跟8位数字。这是基本的,它不会处理最终具有相同名称的文件:

Get-ChildItem *.txt | 
Where {$_.Name -match '_\d{8}\.txt' } | 
Rename-Item -NewName {$_.Name -replace '_\d{8}'}

答案 1 :(得分:0)

我遇到了同样的问题但不幸的是,PowerShell并没有帮助我解决它。所以我然后使用Python来解决这个问题,它像炸弹一样工作。您只需将python脚本复制到受影响的文件夹中,然后运行该脚本以从文件夹和子文件夹中的所有文件中删除时间戳。

import os, sys, re

fileNameList =[]
patho = os.path.dirname(os.path.realpath(sys.argv[0])) 

def renamer(fpath):
    for path, subdirs, files in os.walk(fpath):
        for name in files:
            if re.findall(r"(?ix)(\.ini)", name, re.I) == None:
                if re.search(r"(?ix)(\(\d{4}\_\d{2}_\d{2}\s\d{2}\_\d{2}\_\d{2}\sutc\))", name, re.I) != None:
                    old_name = os.path.join(path,name)
                    print(old_name)
                    new_name = re.sub(r"(?ix)(\s\(\d{4}\_\d{2}_\d{2}\s\d{2}\_\d{2}\_\d{2}\sutc\))", "", old_name, re.I)
                    print(new_name)
                    try:
                        os.replace(old_name,new_name)
                    except:
                        print(old_name)
                        fileNameList.append(old_name)

def log_errors_directories(fileNameList):
    filename = "Log of error filenames.txt"
    if len(fileNameList) != 0:
        log = open(filename, "a")
        log.write("###########################################################\n")
        i = 1
        for line in fileNameList:
            nr_line = str(i) + "  " + str(line)
            log.write(str(nr_line))
            log.write("\n")
            i += 1
        log.write("###########################################################\n\n")
        log.close()



renamer(patho)
log_errors_directories(fileNameList)

这是我第一次在网上发布代码。我希望它对你有用,就像它对我一样。 :)