2014-12-04 34 views
2

的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" } 

回答

0

假设你了解正则表达式,那么这是相当容易使用批处理,加上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.txtname.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" 
) 
+0

从我尝试使用这个脚本,它检测文件名是否包含一个括在括号中的单词?我不明白这段代码的一行,但这工作:) :)非常感谢! – Usman 2014-12-06 08:47:22

+0

@Usman - 如果你想了解它是如何工作的,你将不得不学习正则表达式。网上有很多教程。我已经更新了答案来描述它所寻找的模式,并且我添加了一个我认为可能更精确的新版本。 – dbenham 2014-12-06 15:19:19

+0

感谢您的解释和更新的代码:) – Usman 2014-12-07 07:56:31