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

时间:2013-11-18 23:53:11

标签: shell powershell batch-file command-prompt

我想使用Power Shell或批处理文件根据文本文件中的列表重命名文件夹中的多个文件。基本上我想用作者的姓氏(我已经存储在一个单独的文本文件中)附加文件名。

E.g。目前我有:

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

我见过类似的问题,人们想要递归重命名文件,但他们总是使用通用的附加元素,例如添加下划线或预先挂起的文件夹名称等。

e.g。 https://serverfault.com/questions/6268/easy-way-to-rename-all-files-in-a-directory-in-windows

5 个答案:

答案 0 :(得分:2)

在PowerShell中它将是:

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

如果它看起来会正确复制,请删除-WhatIf

答案 1 :(得分:1)

@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"
))

答案 2 :(得分:1)

实现同样目标的另一种方法:

@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"

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

答案 3 :(得分:0)

采用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"
))

答案 4 :(得分:0)

上述任何一种都是可行的解决方案,只需稍加调整即可,但最简单的方法是简单地创建一个文本文件,每行包含&#34;当前文件名&#34; ...一个TAB ..那么&#34;我想要的文件名&#34;。

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 ,您可以使用它来启动上面的 rename_list.txt 文件。