2017-06-19 160 views
0
@echo off 
setlocal 
set Folder=C:\Test 
set FileMask=*.txt 
set OldestFile= 
for /f "delims=" %%a in ('dir /b /o:d %Folder%\%FileMask%" 2^>NUL') do (
    set OldestFile=%%a 
    goto Break 
) 
:Break 
if "%OldestFile%"=="" (
    echo No files found in '%Folder%' matching '%FileMask%'! 
) else (
    del "%Folder%\%OldestFile%" 
) 

嗨,我嘗試使用批處理文件刪除test目錄最早的文件,但我有或沒有管理員權限,其中「DIR/B/O運行它後得到一個錯誤:d「C \ Test」2> NUL'不被識別爲內部或外部命令,可操作程序或批處理文件。我想在Windows Server 2012 R2 x64位上運行它。請幫忙。謝謝。批處理命令錯誤

+0

在'%folder%'之前的'dir'命令中缺少''''我也相信如果你想**最老的**,你需要'/ o:-d',添加'/ ad'來排除目錄名稱的可能性。 – Magoo

+0

你好@Magoo,我試過在%folder%和/ ad之前加入,但仍然得到相同的錯誤。 – IamBayMax

+0

如果'dir'不適合你,你可能做了一些事情來弄亂你的PATH變量。 – SomethingDark

回答

0

PowerShell看起來更簡潔一些。一旦您確信它正在刪除正確的文件,請刪除-WhatIf開關。

C:\src\t>type xxx.bat 
@ECHO OFF 
SET "Folder=C:\src\t" 
SET "FileMask=*.txt" 

powershell -noprofile -command "dir %Folder% -filt %FileMask% -file |"^ 
    "sort -p LastWriteTime -d |"^ 
    "select -l 1 |"^ 
    "del -WhatIf" 

C:\src\t>xxx.bat 
What if: Performing the operation "Remove File" on target "C:\src\t\th.txt". 

如果您正在運行PowerShell,則語法更清晰。

PS C:\src\t> type .\xxx.ps1 
$Folder = 'C:\src\t' 
$FileMask = '*.txt' 

Get-ChildItem -Path $Folder -Filter $FileMask -File | 
    Sort-Object -Property LastWriteTime -Descending | 
    Select-Object -Last 1 | 
    Remove-Item -WhatIf 
PS C:\src\t> .\xxx.ps1 
What if: Performing the operation "Remove File" on target "C:\src\t\th.txt". 
+0

謝謝你。這是工作!! – IamBayMax

+0

這句話絕對沒有什麼乾淨的。 – SomethingDark

+0

@lit如何刪除壓縮文件中最舊的文件? – IamBayMax