Я пытаюсь использовать цикл FOR /R для перебора некоторых особенно длинных имен папок (длиной более 260 символов, поэтому необходимо использовать \?\) Мне нужно из цикла, полное имя пути и время последнего доступа

Если я сделаю это:

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

Я получаю полный путь и время последнего изменения. Даже если я установлю DIRCMD на /TA, похоже, что это не повлияет на FOR /R. Кто-нибудь знает способ заставить последний раз / дату получить доступ к последнему, а не к последнему измененному? AFAIK, длинное имя пути исключает Powershell, который был моим первоначальным подходом, но я также рад получить предложения по этому вопросу.

2 ответа2

0

Следующие работы (несколько грубо) в 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
    }
}
0

Попробуйте обойти это, используя subst.

Ситуация не слишком простая. Но вы можете комбинировать: A. Использование dir для получения актуального аккредита (он всегда в той же позиции). + B. Использование отладки для фильтрации этого. + C. Использование sub для временного короткого пути (обойти ограничение в 255 символов путем его понижения).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .