Получение справочной страницы forfiles там, где этого не должно быть

Я использую следующую команду для удаления файлов старше X дней (%numb% — количество дней):

forfiles -p "%temp%" -s -m *.* -d %numb% -c "cmd /c del @path"

Тем не менее, когда я его выполняю, он просто подсказывает мне все функции форфайлов и то, как их следует использовать.


person Deniz Zoeteman    schedule 14.07.2009    source источник
comment
Если вы не хотите использовать какое-либо стороннее программное обеспечение, посмотрите на это stackoverflow.com/questions/51054/   -  person Jay    schedule 28.08.2009
comment
Обратите внимание, что вопреки тому, что говорится в документах MS, /m *.* в forfiles не соответствует всем файлам. Он будет соответствовать только файлам, имена которых имеют расширение. Если вы хотите сопоставить все файлы, вам нужно /m *. Или просто полностью опустите /m, так как /m * используется по умолчанию.   -  person AnT    schedule 16.01.2018


Ответы (3)


Вы можете изменить свой "DEL @path" на "echo @path", пока не исправите ошибки...

На моей машине с XPsp3 я заметил, что дефис перед числом дней (%numb%) важен. Итак, это:

forfiles -p "%temp%" -s -m *.* -d 30 -c "cmd /c echo @path"

дал следующее: ОШИБКА: Не найдены файлы с указанными критериями поиска.

но это:

forfiles -p "%temp%" -s -m *.* -d -30 -c "cmd /c echo @path"

дал мне список каталогов

person RobW    schedule 15.07.2009
comment
спасибо, это дает много добра ... я думаю, что команда «до» на самом деле сказала посмотреть 30 дней в следующем ... ха-ха. - person Deniz Zoeteman; 18.08.2009
comment
RobW... ваш ответ очень помог... Спасибо - person Vinay Kadalagi; 10.07.2015

Одно предположение, поскольку вы не предоставили много информации, заключается в том, что если вы не используете 2003/Vista, у вас не должно быть пробела после каждого параметра:

forfiles -p"%temp%" -s -m*.* -d%numb% -c"cmd /c del @path"

Также возможно, что ваши параметры замены не работают должным образом. Мне часто бывает полезно ставить перед командой префикс «echo», чтобы увидеть, что на самом деле обрабатывается:

echo forfiles -p "%temp%" -s -m *.* -d %numb% -c "cmd /c del @path"
person lavinio    schedule 14.07.2009

Изначально вы можете использовать vbscript. в этом примере количество дней равно 30

Set objFS = CreateObject("Scripting.FileSystemObject")
strFolder = "c:\test"
numdays=30
today=Now
Set objFolder = objFS.GetFolder(strFolder)
Go (objFolder)
Sub Go(objDIR)
  If objDIR <> "\System Volume Information" Then
    For Each eFolder in objDIR.SubFolders
        Go eFolder
    Next
    For Each strFile In objDIR.Files
        If DateDiff("d",strFile.DateLastModified,today) >= numdays Then
           WScript.Echo "file found that is 1 month old or more: " & strFile
           'objFSO.DeleteFile(strFile) 'uncomment to use
        End If 
    Next 
  End If  
End Sub
person ghostdog74    schedule 15.07.2009