繁体   English   中英

使用forfile或潜在的Powershell批量重命名

[英]Batch renaming with forfiles, or potentially Powershell

尝试使用forfiles和Powershell批量重命名文件夹中的文件时出现问题。 我遇到的问题是我需要搜索其中带有_T_文件,所以我使用搜索符号*_T_*.cr2因为它们都是RAW文件。 在给定的文件夹中,将有143个左右的RAW文件,其中的69个名称中将带有_T_ ,其余的则没有。 我要实现的是运行一个快速命令,该命令清除掉所有带有_T_文件,然后在文件前添加一个额外的_。

所以之前: Ab01_T_gh.cr2和之后_Ab01_T_gh.cr2我的问题是,搜索_T_文件会使命令不断_T_执行,因此文件最终看起来像_____________Ab01etc直到达到Windows文件名限制为止。 这是我的forfiles命令的样子:

forfiles /S /M *_T_*.cr2 /C "cmd /c rename @file _@file"

它可以工作,但是效果很好。

我也尝试过Powershell,结果相同。

Get-ChildItem -Filter "*_T_*.cr2" -Recurse | Rename-Item -NewName { "_" + $_.Name} 

也许有一种方法可以拆分代码的“查找”和“重命名”部分? 任何帮助将不胜感激! 我无法手动分离_T_文件,因为这非常耗时,因为每个父文件夹有时会有75 _T_文件夹,每个子文件夹中都有143个RAW文件。

这工作正常:

@echo off

setlocal EnableDelayedExpansion

for %%a in (*_T_.cr2) do (
set z=%%a
set z=!z:~,1!

if not !z!==_ rename %%a _%%a
)

我不得不删除forfiles因为我无法使用@变量(也许使用findstr )。 我在模式上采用了简单的for循环,并且仅在下划线未开始的情况下才进行重命名。

递归版本:

@echo off

setlocal EnableDelayedExpansion

for /R . %%a in (*_T_.cr2) do (
echo %%~na%%~xa
set z=%%~na
set z=!z:~,1!

if not !z!==_ rename %%a _%%~na%%~xa
)

这是基于原始代码的PowerShell版本:

Get-ChildItem -Filter "*_T_*.cr2" -Recurse | 
Where-Object { $_.Name.Substring(0,1) -ne '_' } |
Rename-Item -NewName $("_" + $_.Name)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM