2014-12-04 33 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