我想使用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
答案 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 文件。