Dropbox搞砸了我文件夹中的很多文件,所以情况如下: 我现在每个文件都有2个文件名:
1)file。*
2)文件(Home-PC的冲突副本2014-12-04)。*
我要保留的文件是第二个,我想删除第一个文件,所以最终的结果是我只有一个名为file。*(名字)的文件,其中包含第二个文件的内容。 这发生在许多文件夹中的许多文件中,我想批量重命名所有文件,替换第一个文件。
我已尝试在此网站上使用此powershell命令对两个文件a.txt和b.txt(用于试验):
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 :(得分:0)
假设您理解正则表达式,那么使用批处理与JREN.BAT相结合是相当容易的 - 这是一个混合实用程序,它通过执行正则表达式搜索来重命名文件并替换文件名。 JREN.BAT是纯脚本,可以在XP之后的任何Windows机器上本机运行。
我实际上并没有使用JREN进行重命名,而是我通过它来获取文件的MOVEd名称。
您的规格有点模糊。我使用的正则表达式可能需要调整。目前,它会查找<OneOrMoreSpaces>(
之前的).<extensionText>
的最后一次出现。它会保留<OneOrMoreSpaces>(
之前的所有文本以及扩展名。
下面的脚本将打印出将要执行的MOVE命令。从脚本中删除ECHO
以实际执行移动操作。
如果原始文件存在,脚本仅移动文件。如果您想要始终移动文件,请删除if exist "%%~dpA%%B"
<强> fixDupes.bat 强>
@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
重命名为{{1虽然我想也许它应该留下文件。实际扩展名为name.abc.txt
,因此可以说该名称与模板不匹配。以下是仅在真正扩展名之前重命名.txt
的文件的修复程序。
(stuff to be removed)