簡體   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