根据外部列表在Windows中批量重命名

时间:2016-11-01 10:31:28

标签: windows powershell batch-file

假设我有一个我想要更改的潜在目录名列表。没有具体的规则,只需要从旧的名单中切换即可。到"一个新的名单和#34;

例如,我想要: - 目录" A" (如果存在)要重命名为" LEA" - 目录" ON" (如果存在)要重命名为" ONS" - 等等......,这是一个包含约100个潜在名字的列表。

(其他目录和文件当然未触及)。

我想让它成批,因为这必须在很多不同的计算机上完成。

您认为最好的方法是什么?使用Windows batch / powershell很好。如果需要,可以考虑在外部.txt文件中使用名称列表。

2 个答案:

答案 0 :(得分:1)

一个简单的批处理脚本就可以了:

for /f "tokens=1,2 delims=/" %%i in (input.txt) do move "%%i" "%%j" 

或者如果您关心缺少目录错误消息

for /f "tokens=1,2 delims=/" %%i in (input.txt) do if exist "%%i" (move "%%i" "%%j")

%%用于在批处理脚本中转义。如果您只是在命令行中输入此内容,则只需%

Input.txt应包含类似

的内容
A/LEA
ON/ONS

在" delims=/"中使用/(例如)作为分隔符让你在目录名称中有空格。如果您没有空格,可以将其保留,空格和制表符作为默认分隔符。

答案 1 :(得分:0)

使用名为

的csv文件

此csv文件的内容:

 oldnamedir;newnamedir
 data;newdata
 data2;newdata2

执行PowerShell脚本:

   $mycsv=import-csv -Delimiter ";" -Path "c:\temp\myfilewithreplace.csv"
   $startdir="C:\dir_where_you_want_rename_dirs"

   foreach ($row in $mycsv)
   {
     $listdirtorename= gci -Path $startdir -Directory -Recurse | where { ($_.FullName -split "\\" | select -last 1) -eq ($row.oldnamedir)  }  | select Name, FullName, @{N="LenghtName";E={($_.FullName -split "\\").Count}} | sort LenghtName -Descending 

      foreach ($dir in $listdirtorename)
      {
        rename-item -Path $dir.FullName -NewName $row.newnamedir -Force
      }
   }