繁体   English   中英

如何从文本文件中的名称列表中批量重命名目录中的文件

[英]How to batch rename files in a directory from a list of names in a text file

我想使用Power Shell或批处理文件根据文本文件中的列表重命名文件夹中的几个文件。 本质上,我想在文件名后附加作者的姓氏(我将其存储在单独的文本文件中)。

例如,目前我有:

C:\\ myfiles文件

9-ART-2013.pdf
4-EGO-2013.pdf
2-ART-2013.pdf

我的文本文件(与文件顺序相同):

C:\\ myfiles文件

_Smith
_Jenkins
_McMaster

我希望将文件重命名如下:

9-ART-2013_Smith.pdf
4-EGO-2013_Jenkins.pdf
2-ART-2013_McMaster.pdf

我曾见过类似的问题,人们想递归地重命名文件,但他们总是使用通用的普通附加元素,例如添加下划线或在文件夹名称前添加前缀等。

例如https://serverfault.com/questions/6268/easy-way-to-rename-all-files-in-a-directory-in-windows

在PowerShell中将是:

$names = Get-Content c\myfiles
Get-ChildItem C:\somedir\*.pdf | Sort -desc | 
    Foreach {$i=0} {Rename-Item $_ ($_.basename + $names[$i++] + $_.extension) -WhatIf}

如果看起来可以正确复制,请删除-WhatIf

@ECHO OFF &SETLOCAL ENABLEDELAYEDEXPANSION <Text.txt ( for /f "tokens=1*delims=_" %%a in ('dir /b /a-d /o-d *-*-*.pdf') do if "%%b"=="" ( set "xand=" set /p "xand=" echo ren "%%~a" "%%~na!xand!%%~xa" ))

实现相同目的的另一种方法:

@echo off
setlocal EnableDelayedExpansion

rem Load the list of authors:
set i=0
for /F %%a in (myfiles.txt) do (
   set /A i+=1
   set "author[!i!]=%%a"
)

rem Do the rename:
set i=0
for /F %%a in ('dir /b *.pdf') do (
   set /A i+=1
   for %%i in (!i!) do ren "%%a" "%%~Na!author[%%i]!%%~Xa"
)

编辑添加了新方法

如果名称文件列表具有“ OLD-Name NEW-Name”结构,则代码要简单得多:

for /F "tokens=1,2" %%a in (myfiles.txt) do ren "%%a" "%%b"

请注意,名称必须用空格分隔。

采用Endoro并简化:

@ECHO OFF &SETLOCAL ENABLEDELAYEDEXPANSION
<texts.txt (
for /f "tokens=* delims=* " %%a in ('dir /b /a-d /o-d *-*-*.pdf') do (
set "xand="
set /p "xand="
ren "%%~a" "%%~na!xand!%%~xa"
))

上面的任何一种都可以通过一些调整来解决,但是最简单的方法是简单地创建一个文本文件,每行包含“当前文件名” ... TAB ...然后“我想要的文件名” 。

9-ART-2013.pdf     9-ART-2013_Smith.pdf
4-EGO-2013.pdf     4-EGO-2013_Jenkins.pdf
2-ART-2013.pdf     2-ART-2013_McMaster.pdf

然后将文件另存为rename_list.txt,并使用以下代码创建一个批处理文件。

for /F "tokens=1,2" %%a in (rename_list.txt) do ren "%%a" "%%b"
pause

调整好暂停线并使其正确运行后,您可以将其删除。 只需将rename_list.txt和批处理文件复制到要重命名的文件所在的文件夹中,然后运行该批处理文件。 如果您的文件夹很大,文件名很多,则可以通过运行以下行的批处理文件来将它们保存在文本文件中。

dir /D > filename_scrapper_output.txt

它将创建一个文本文件filename_scrapper_output.txt ,您可以使用它来启动上述的filename_scrapper_output.txt文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM