使用批处理更改多个文件夹中的多个文件名

时间:2016-08-09 06:13:54

标签: powershell filenames

我有几个文件夹,其中包含5到20个具有不同名称的文件。它们每周都会被替换,因此每个文件的名称也会发生变化。但是我需要它们具有特定的名称,以便我可以使用我的SQL加载器上传它们。

有没有办法创建批处理文件,进入我指定的每个文件夹,选择所有文件并更改所有名称? Perfect Solution只是一个向上计数的数字,如:file1.xml,file2.xml等。

由于我是批处理的新手,我搜索了一下并找到了以下代码,但它只更改了1个特定文件夹中的文件。

Dir *.xml | ForEach-Object  -begin { $count=1 }  
-process { rename-item $_ -NewName "$count.xml"; $count++ }

更新1 我发现了工作代码,它允许我按照我希望的方式重命名文件夹中的文件。我只需要一个代码,允许我同时或者一个接一个地自动执行此操作。

@echo off & setlocal EnableDelayedExpansion 

set a=1
for /f "delims=" %%i in ('dir /b *.xml') do (
ren "%%i" "!a!.xml" 
set /a a+=1
) 

2 个答案:

答案 0 :(得分:0)

@echo off & setlocal EnableDelayedExpansion 

set a=1

rem make old name to prevent same name collision
for /D %%i in (*) do (
    cd %%i
    for /f "delims=" %%j in ('dir /b *.xml') do (
        ren "%%j" "%%j-old.xml" 
    ) 
    cd ..
)

rem rename process
for /D %%i in (*) do (
    cd %%i
    for /f "delims=" %%j in ('dir /b *.xml') do (
        ren "%%j" "!a!.xml" 
        set /a a+=1
    ) 
    cd ..
)

echo Done
pause
Start .
希望它有所帮助。

答案 1 :(得分:0)

这是一个PowerShell代码,可以为多个文件夹(子文件夹)执行相同的操作

$path = 'Z:\'

Get-ChildItem -Path $path -Filter *.xml -Recurse | ForEach-Object -Begin {
  [int]$count = '1'
} -Process {
  Rename-Item -Path $_.FullName -NewName "$count.xml" -ErrorAction Stop 
  $count++
}