2017-01-12 4 views
0

У меня есть список файлов с именем:Пакетный скрипт для удаления «Дубликат» файлы

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

т.д.

Где больше (число) последнего файла обновления.

Я хочу сценарий .bat, который позволяет получить содержание file (maxnumer).txt до file.txt.

+4

Что вы пробовали в качестве кода? – Hackoo

+0

Я понятия не имею, как это сделать. Теперь я использую для циклов, если условия, заданные переменные, но у меня мало опыта. Первая идея Mi заключалась в том, чтобы запустить цикл for и проверить, существует ли файл (% i) .tex ". Но тогда я не уверен, как продолжить ... –

+1

Я не могу найти вопрос в вашем сообщении. В названии говорится, что вы хотите что-то удалить, но тело «вопрос» не описывает, что нужно удалить, оно только говорит о копировании файла на другой. Поэтому, пожалуйста, уточните! Имеет ли файл с наибольшим числом также дату последнего создания или изменения? Затем поделитесь тем, что вы пробовали до сих пор, и с чем у вас проблемы! StackOverflow - это не место, где можно бесплатно скачать скрипты! Прочитайте это: [ask] – 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

Вот немного хакерского ответа.

Этот сценарий будет переместить все файлы из file (1).txt до file (10).txt в file.txt, оставив только file.txt, которая теперь содержит текст, который был в файле (10) .txt

Doing в возрастающем порядке обеспечит наибольшее число, которое существует, является последним, которое нужно переместить.

@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, вручную удалить все (п) файлы, так что вы просто список «не-дубликатов» имен файлов, и использовать это как ваш вход. Вы

Есть, вероятно, более элегантные решения, но со всеми особенностями партии я не удивлюсь, если найдутся страницы и страницы.

Если вы хотите сохранить все исходные файлы не только в конечном итоге с окончательным file.txt без каких-либо копий, то я вы хотите использовать COPY

Если вы хотите сохранить все исходные файлы, то вы хотел бы использовать COPY not MOVE.

В этом случае, чтобы удалить все лишние операции (т.е. копировать только с наибольшим номером файла, а не копировать все файлы в порядке) то что-то вроде IF NOT EXIST %name% (!B!).%ext% где !B!=%%A+1 в вашей (теперь многострочный) цикл и использовать SETLOCAL EnableDelayedExpansion на сделайте арифметику правильно. Но это не обязательно, копирование 1, затем 2, затем 3, затем 4 делает то же самое, если немного медленнее, чем пропустить 1 2 и 3 и просто делать 4.

Надеюсь, это поможет вам указать в в правильном направлении, не стесняйтесь задавать вопросы, если это не ясно.

Смежные вопросы