批处理命令错误
问题描述:
@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位上运行它。请帮忙。谢谢。批处理命令错误
答
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".
在'%folder%'之前的'dir'命令中缺少''''我也相信如果你想**最老的**,你需要'/ o:-d',添加'/ ad'来排除目录名称的可能性。 – Magoo
你好@Magoo,我试过在%folder%和/ ad之前加入,但仍然得到相同的错误。 – IamBayMax
如果'dir'不适合你,你可能做了一些事情来弄乱你的PATH变量。 – SomethingDark