2014-10-01 6 views
0

Я прочел answer to "Batch File to Delete Files in a Folder" proposed by @Magoo и пробовал код, но не мог комментировать или задавать дополнительные вопросы, поэтому я извиняюсь, если я нарушаю некоторые правила здесь.Сохранить новый файл

Позвольте мне сказать, что я могу неправильно понять, как это должно работать.

Сначала я убедился, что все файлы в каталоге, который я хотел очистить, имели ту же дату. Затем я заменил c: \ sourcedir именем указанного каталога и запустил файл cmd.

Я ожидал, что он создаст пустую строку, но получит полный список файлов.

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

Я не очень хорошо разбираюсь в материалах DOS/CMD, поэтому мне было интересно, может ли @Magoo прояснить эту проблему.

+0

Попробуйте вставить приведенный выше комментарий в нужную нить. Удалите этот вопрос, если он работает. – foxidrive

+0

Не могу этого сделать - кажется глупым, но нужно иметь хотя бы 50 рецензий, чтобы прокомментировать, хотя по какой-то причине я могу делать в своей собственной теме. – webhiker

ответ

1

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

@echo off 
    setlocal enableextensions disabledelayedexpansion 

    pushd "c:\where\the\filesAre" && (
     for /f "skip=1 delims=" %%a in ('dir /b /a-d /tw /o-d *') do echo del "%%a" 
     popd 
    ) 

Во-первых, активный каталог изменяется на adecuated папку (изменение ваших потребностей). Затем команда for используется для выполнения команды dir и обработки ее вывода. Для каждой строки в dir выходе, код после пункта do выполняются с содержанием строки, хранящейся в for заменяемого параметра %%a

Команда dir перечислит файлы в голом формате (/b только имена файлов) , за исключением каталогов (/a-d), по убыванию последней записи (/tw /o-d). Таким образом, самый новый файл является первым в списке (выходом команды dir), который будет обрабатывать команда for.

Как мы просим for пропустить одну строку (skip=1), этот первый файл будет проигнорирован. Для остальных строк/файлов выполняется команда del.

del операции отражаются только на консоли. Если вывод верен, удалите команду echo, чтобы удалить файлы.

отредактирован адаптироваться к комментариям

@echo off 
    setlocal enableextensions disabledelayedexpansion 

    rem Configure extensions to process 
    set "_ext.00=al*.txt" 
    set "_ext.01=cm*.txt" 

    rem Change to the desired folder 
    pushd "c:\where\the\filesAre" || goto :eof 

    rem For each pattern in the list 
    rem  For each file matching the pattern (except the newest) 
    rem   Delete the file 
    for /f "tokens=1,* delims==" %%x in (' 
     set _ext. 
    ') do for /f "skip=1 delims=" %%a in (' 
     dir /b /a-d /tw /o-d "%%~y" 2^>nul 
    ') do echo del "%%a" 

    popd 

Определить «массив» со списком шаблонов файлов для обработки. Для каждого из шаблонов (с помощью команды set внутри outter for /f) перебирайте файлы, соответствующие этому шаблону (внутренний for), пропуская первый/новый и удаляя остальные.

+0

Спасибо за ваши усилия. Я не уверен, почему, но этот код ничего не делает на моей машине, за исключением списка всех файлов, бара один - это файл cmd, который выполняется. Мне нужно сохранить последний файл для данного шаблона, как в AL * .TXT, CM * .TXT и т. Д., И удалить остальные. – webhiker

+0

@webhiker, измените '*' на 'al *.txt' и test –

+0

Теперь я получаю только файлы txt, и это вроде работает, но только если есть более одного файла. Если есть только один, он также будет удален, и этого просто не будет. Кроме того, было бы неплохо, если бы в качестве параметра передать маску файла. – webhiker

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