批量重命名文件和覆盖,如果文件名已经存在(窗口)
的Dropbox已经搞砸了许多文件在我的文件夹,所以这里的情况: 我现在有2名的每个文件我想保留:批量重命名文件和覆盖,如果文件名已经存在(窗口)
1)文件*。
2)文件(家庭-PC的矛盾复制2014年12月4日)。*
文件我想保持是第二个,我想删除的第一个文件,以便最终结果将只有一个名为file。*(first name)的文件和第二个文件的内容。 这发生在许多文件夹中的许多文件,我想批量重命名所有的文件,替换第一个文件。
我一直在使用本网站上的两个文件a.txt中和b.txt(用于实验)这个PowerShell命令尝试:
Get-ChildItem . -include *.txt | Move-Item -Destination { $_.name.Replace("a","b")} -Force
但没有用,PowerShell的不执行任何操作,并抛出如果我不使用-Force,则会出错。 我没有任何PowerShell或命令提示符的经验,但我可以复制/粘贴命令,因为我尝试了上述命令。
我也曾尝试使用其他命令,失败:
Get-ChildItem . -include *.txt | Where-Object { $_.name -match "a$" } | Move-Item -destination { $_.name -replace "a$", "b" }
假设你了解正则表达式,那么这是相当容易使用批处理,加上JREN.BAT - 混合工具,可以进行常规的重命名文件表达式搜索并替换文件名。 JREN.BAT是纯粹的脚本,它可以在任何Windows机器上运行,从XP开始。
我实际上并没有使用JREN进行重命名,而是使用它来获取文件的MOVEd名称。
您的规格有些模糊。我使用的正则表达式可能需要调整。目前它寻找在).<extensionText>
之前的最后一次出现<OneOrMoreSpaces>(
。它保留<OneOrMoreSpaces>(
之前的所有文本以及扩展名。
下面的脚本将简单地打印出将要执行的MOVE命令。从脚本中删除ECHO
以实际执行移动操作。
脚本只在原始文件存在时移动文件。如果你想总是移动文件,然后删除if exist "%%~dpA%%B"
fixDupes。蝙蝠
@echo off
for /f tokens^=1^,3^ delims^=^" %%A in (
'jren "(.*) +\(.*\)(\..*)" "$1$2" /t %*'
) do (
if exist "%%~dpA%%B" echo move /y "%%A" "%%~dpA%%B"
)
对处理当前目录:
fixDupes
要处理C:\myFolder
目录
fixDupes /P "C:\myFolder"
处理递归C:\myFolder
及其所有子
fixDupes /P "C:\myFolder" /S
更新:其实,我认为对于扩展的正则表达式可能有点错误的,因为它会重命名name (xyz).abc.txt
到name.abc.txt
,而我想也许应该独自离开的文件。实际的扩展名是.txt
,所以人们可能会认为该名称不应与模板匹配。下面是一个修复程序,它只在真正的扩展名之前立即重命名具有(stuff to be removed)
的文件。
@echo off
for /f tokens^=1^,3^ delims^=^" %%A in (
'jren "(.*) +\(.*\)(\..*)$" "$1$2" /t %*'
) do (
if exist "%%~dpA%%B" echo move /y "%%A" "%%~dpA%%B"
)
从我尝试使用这个脚本,它检测文件名是否包含一个括在括号中的单词?我不明白这段代码的一行,但这工作:) :)非常感谢! – Usman 2014-12-06 08:47:22
@Usman - 如果你想了解它是如何工作的,你将不得不学习正则表达式。网上有很多教程。我已经更新了答案来描述它所寻找的模式,并且我添加了一个我认为可能更精确的新版本。 – dbenham 2014-12-06 15:19:19
感谢您的解释和更新的代码:) – Usman 2014-12-07 07:56:31