我有一个装满文件(.avi和.txt文件)的文件夹:
MyVideo1-MyEncode.avi
MyVideo1.avi 16-05-2019 15-41-01.txt
My Video 2.avi
My Video 2.avi 16-05-2019 16-43-11.txt
My Video 3 [Summer]-MyEncode.avi
My Video 3 [Summer].avi 16-05-2019 17-57-24.txt
My Video 4-(Fall).avi
My Video 4-(Fall).avi 13-05-2019 19-29-16.txt
My Video 5-(Winter)-MyEncode.avi
My Video 5-(Winter).avi 11-05-2019 11-15-05.txt
如果.avi文件的文件名中包含“-MyEncode” ,我想将字符串的这一部分复制到相应文本文件的文件名中。
例如
“ MyVideo1-MyEncode.avi” 在文件名中包含文本“-MyEncode”
所以: “ MyVideo1.avi 16-05-2019 15-41-01.txt”
应重命名为: “ MyVideo1-MyEncode.avi 16-05-2019 15-41-01.txt”
另一方面:
“我的视频2.avi” 不包含字符串“ -MyEncode”,因此不应重命名相应的.txt文件。
我有许多包含这样的文件的文件夹。
有人可以帮忙吗?
PS-如果我使事情变得简单,可以将“我的视频3 [Summer] -MyEncode.avi”重命名为“ My_Video_3_ [Summer] -MyEncode.avi”(即删除空格)
答案 0 :(得分:0)
空格字符不是问题。正则表达式使用的括号是。 [] and ()
最好不要在文件名和目录名中使用它们。
在同一目录中创建这两个(2)文件。当您对文件将被正确重命名感到满意时,请从-WhatIf
cmdlet中删除Rename-Item
。
=== Do-EncRename.ps1
Get-ChildItem -Path 'C:/src/t/myenc/' -Filter '*-MyEncode.avi' |
Where-Object { ! $_.PSIsContainer } |
ForEach-Object {
if ($_.Name -match '^(.*)\-MyEncode.avi') {
$header = $Matches[1]
Get-ChildItem -Filter ($header + "*.txt") |
Where-Object { ! $_.PSIsContainer } |
ForEach-Object {
if ($_.Name -match (($header -replace '[\[\]\(\)]', '.') + "(\.avi.*\.txt)")) {
$trailer = $Matches[1]
Rename-Item -LiteralPath $_.FullName -NewName ($header + '-MyEncode' + $trailer) -WhatIf
}
}
}
}
=== Do-EncRename.bat
powershell -NoLogo -NoProfile -File "%~dp0%~n0.ps1"
而且,这是一种无需PowerShell即可实现的方法。当REN
语句看起来正确时,请删除该行开头的echo
。
=== doit.bat
@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%a in ('dir /b "*-MyEncode.avi"') do (
set "FN1=%%~a"
set "HEADER=!FN1:-MyEncode.avi=!"
for /f "delims=" %%b in ('dir /b "!HEADER!.avi*.txt"') do (
set "FN2=%%b"
set "NFN=!FN2:.avi=-MyEncode.avi!"
echo REN "!FN2!" "!NFN!"
)
)
运行.bat脚本。
C:>CALL "myenc2.bat"
REN "My Video 3 [Summer].avi 16-05-2019 17-57-24.txt" "My Video 3 [Summer]-MyEncode.avi 16-05-2019 17-57-24.txt"
REN "My Video 5-(Winter).avi 11-05-2019 11-15-05.txt" "My Video 5-(Winter)-MyEncode.avi 11-05-2019 11-15-05.txt"
REN "MyVideo1.avi 16-05-2019 15-41-01.txt" "MyVideo1-MyEncode.avi 16-05-2019 15-41-01.txt"