2017-01-12 77 views
0

我有一個名爲文件的列表:批處理腳本刪除「重複」的文件

file.txt 
file (1).txt 
file (2).txt 

凡大於(數)更新的最後一個文件。

我想要一個.bat腳本,它允許獲取file (maxnumer).txtfile.txt的內容。

+4

那你嘗試作爲代碼? – Hackoo

+0

我不知道該怎麼做。我現在如何使用循環,如果條件,設置變量,但我沒有太多的經驗。 Mi第一個想法是運行for循環並測試「file(%i).tex」是否存在。但後來我不知道如何着手...... –

+1

我在你的文章中找不到問題。標題說你想刪除某些東西,但「問題」主體並沒有描述要刪除的東西,而只是說將某個文件複製到另一個文件中。所以請澄清!具有最多號碼的文件是否也有最新的創建或修改日期?然後分享你迄今爲止所嘗試的以及你遇到的問題! StackOverflow不是免費索取腳本的地方!閱讀此:[問] – aschipfl

回答

4

dir /B /OD /TW file*.txt按上次寫入時間的排序順序列出文件名(參見dir /?)。

下一頁評論批處理腳本能爲你做的工作:

@echo OFF 
SETLOCAL EnableExtensions 
rem delete empty `_lastfile` variable 
set "_lastfile=" 
rem store file name of last written time into `_lastfile` variable 
for /F "delims=" %%G in ('dir /B /OD /TW file*.txt 2^>NUL') do set "_lastfile=%%~G" 
rem            ↑↑↑↑↑↑ suppress errors 
rem check the `_lastfile` variable 
rem is defined? 
rem     AND is different from "file.txt"? 
if defined _lastfile if /I "%_lastfile%" NEQ "file.txt" copy /Y "%_lastfile%" "file.txt" 

資源(必讀):

+0

非常感謝你 –

+0

比我的答案更好,做得好:) –

1

這是一個hacky答案。

該腳本將偏離file (1).txt所有文件備份到file (10).txt到FILE.TXT,只留下file.txt的它現在包含名爲.txt

那是在文件中的文本(10)按升序排列否則它將確保存在的最高數字是最後一個要移動的數字。

@echo off 
set /P name=Enter name of file without extension: 
echo enter extension: 
set /P ext=. 
echo. & echo. 
echo these actions will be performed: & echo. 
FOR /L %%A IN (1,1,10) DO @echo move /y "%name% (%%A).%ext%" "%name%.%ext%" 
echo. & pause & echo. 
FOR /L %%A IN (1,1,10) DO  move /y "%name% (%%A).%ext%" "%name%.%ext%" 
pause 

你可以使用IF EXIST %name% (%%A).%ext%要試圖移動不存在的文件停止腳本,但它並沒有真正影響到什麼做到這一點,所以我沒有理會。

上面的腳本將爲特定的命名文件執行此操作。要做到這一點對目錄中的所有文件都將是可能的,這裏有一些提示,讓你去

使用dir /b >filenames.txt獲得在一個文本文件中列出的目錄中的所有文件

執行,每一個動作在一個文本行做

for /f "usebackq delims= tokens=* %%a in (`filenames.txt`)" DO (
    ::some stuff here 
) 

我會去了解它的方式是讓filenames.txt,手動刪除所有的(n)的文件,所以你只是有「不重複」的文件名列表,並將其用作您的輸入。你

有可能是更優雅的解決方案,但具有所有批次的特點我不會驚訝地發現他們是頁面和頁面長。

如果要保留所有的原始文件沒有就這樣結束了,沒有複製最終file.txt的,那麼我想你如果要保留所有的原始文件使用COPY

,那麼你會想要使用COPY而不是MOVE。

在這種情況下,去除所有多餘的操作(即只複製最高編號的文件,而不是複製所有以文件),然後像IF NOT EXIST %name% (!B!).%ext%其中!B!=%%A+1你(現在的多)內的循環和使用SETLOCAL EnableDelayedExpansion使算術正常工作。但它不是真的必要,複製1,然後2,然後3,然後4做同樣的事情,如果比跳過1 2和3,只是做4慢一點。

我希望這有助於指出你在如果不清楚,請隨時提問。