2016-02-29 2 views
0

Я хотел бы создать пакетный файл, который можно сделать следующее:Batch File - Удаление файла, только если другой файл существует

If "1abc File (X) .bin" существует, то удалить «1abc File (Y) .bin ", если нет, тогда сохраните файл 1abc (Y) .bin" и переходите.

В основном обычно существует несколько версий файла, где один вид (отмеченный одной переменной в имени файла, который всегда остается неизменным) превосходит другой. Если эта превосходная версия, однако, НЕ существует, я хочу, чтобы нижняя версия осталась.

Возможно ли это?

+0

Просьба представить любой код, который вы пробовали до сих пор, а также добавить некоторые данные примера на свой вопрос для уточнения ... – aschipfl

ответ

0

Вы можете использовать оператор IF (http://www.computerhope.com/if.htm):

IF EXIST File1.ext DEL File2.ext 

UPDATE - Для решения конкретной проблемы, упомянутые в вопросе:

set FileNames="File 1abc (*).bin" 
set LastVersion="" 
:: Find last version 
for %%f in (%FileNames%) do (
    if "%%f" GTR %LastVersion% SET LastVersion="%%f" 
) 
:: Delete old versions 
for %%f in (%FileNames%) do (
    if "%%f" LSS %LastVersion% DEL "%%f" 
) 

Существует одна загвоздка: если версия (X или Y в вашем примере) - это число, оно должно указываться с фиксированным числом цифр (например, (009), (010), ...), потому что (9) считается больше, чем (10).

+0

Не будет ли это требовать, чтобы я назвал каждый файл? Было бы намного быстрее, чем просто сделать это вручную? –

+1

Это хорошо работает для проблемы в названии, но не о проблеме, описанной в актуальном вопросе. Для этого вам понадобится цикл for/f. – SomethingDark

+0

Как это делается? Эта концепция для меня нова. –