将文件重命名为包含文件名的列表

时间:2014-06-09 10:40:26

标签: batch-file powershell cmd

我有一个包含这样文件的文件夹:

  

11223.xml,11223_2.xml,11223_3.xml ...

1123是常数,它可以是任何其他模式,但对于给定的文件夹,模式将是常量。

我有一个txt文件,其文件名如下:

  1. 指数
  2. 主页 ...
  3. 文件名不必如图所示编号,但也无关紧要。

    是否有DOS命令或PowerShell方法将文件夹中的文件重命名为文本文件中的名称。 目前我从文本文件中复制每个文件名,一次一个,并重命名文件夹中的文件,如下所示:

    11223.xml = Index.xml
    11223_2.xml = about.xml
    

    谢谢&问候。

2 个答案:

答案 0 :(得分:0)

从您的示例中看起来您希望将现有文件的名称(按字母数字顺序)更改为输入文件中的名称(按照放入那里的顺序)。如果我的假设是正确的,那么像这样的PowerShell脚本应该可以工作:

[Collections.ArrayList]$newNames = Get-Content 'C:\path\to\newnames.txt'

Get-ChildItem 'C:\some\folder' | ? { -not $_.PSIsContainer } | sort Name | % {
  Rename-Item $_ ($newNames[0] + $_.Extension)
  $newNames.RemoveAt(0)
}

请注意,要使其正常工作,您的文件夹中的文件数必须与文件中的行数相同。

答案 1 :(得分:0)

下面的批处理文件执行您想要的重命名过程。如果文件多于名称,则使用数字增加的标准名称。如果有更多名称,则不使用其他名称。如果您愿意,可以修改此程序以包括每个新名称前面的数字。

@echo off
setlocal EnableDelayedExpansion

set i=0
< fileNames.txt (
   for /F "delims=" %%a in (1123*.xml) do (
      set "name="
      set /P name=
      if not defined name (
         set /A i+=1
         set name=noName_!i!
      )
      ren "%%a" "!name!.xml"
   )
)