Expansão da variável em lote do DOS para fornecer o Horário do último acesso

0

Estou tentando usar um loop de FOR / R para iterar em algumas pastas particularmente longas (com mais de 260 caracteres, portanto, a necessidade de usar \? \) Eu preciso sair do loop, o nome do caminho completo e o último tempo de acesso

Se eu fizer isso:

for /r "\?\c:\windows" %a in (*.bat) do echo %~fta

Eu obtenho o caminho completo e o horário da última modificação. Mesmo se eu definir DIRCMD para / TA, parece não haver nenhum efeito no FOR / R Alguém sabe uma maneira de forçar que a hora / data seja acessada pela última vez em vez da última modificação? AFAIK, o nome do longo caminho exclui Powershell, que foi minha abordagem original, mas feliz em receber sugestões sobre isso também.

    
por Dave_J 27.01.2015 / 14:48

2 respostas

0

As seguintes obras (um pouco grosseiramente) em Powershell

[CmdLetBinding()]

Param(
[string]$Path,
[string]$extension = "*"
)

If ($Path.ToString().Substring($Path.Length-1,1) -eq "\")
{
    $Path = $Path.ToString().Substring(0,$Path.Length -1)
}

If ($Extension[0] -eq ".")
{
    $Extension = $Extension[1..$Extension.Length] -join ""
}

$dirlisting = cmd /c "dir \?\$path\*.$extension /s /-c /t:a"

ForEach ($line in $dirlisting)
{
    if ($line -match "^ Directory of (.*)$")
    {
        $FolderName = $matches[1] -replace "\\\?\",""
    } ElseIf ($line -match "(\d{2}/\d{2}/\d{4})\s+?(\d{2}:\d{2})\s+?(\d+?)\s+?(.+)$")
    {
    $DateAndTime = [datetime]::Parse($matches[1] + " " + $matches[2])
    $Filesize = $matches[3]
    $FileName = Join-Path -Path $FolderName -ChildPath $matches[4]

    $FileObject = New-Object PSCustomObject -Property @{
        FullPath=$FileName
        LastAccessTime=$DateAndTime
        FileSize=$FileSize
        }
    Write-Output $FileObject
    }
}
    
por 27.01.2015 / 17:24
0

Tente contornar isso usando subst.

A situação não é muito simples. Mas você pode combinar: A. Usando o dir para obter o acdate real (é sempre na mesma posição). + B. Usando o debug para filtrar isso. + C. Usando o subst para o caminho temporário de shorthen (ignora o limite de 255 caracteres, diminuindo-o).

    
por 27.01.2015 / 15:02