Liste todos os files e dirs sem recursion com junções

Existe uma ferramenta portátil nativa que pode me dair uma list unicode ( ou pelo less compatível com o sistema local ) de todos os files e diretórios sob um path recursivamente , sem recuair em pontos de junit ou links no Windows?

Por exemplo, o command de dir embutido, bem como o takeown e icacls executados em um loop infinito com o diretório Application Data ( 1 ).

  • Windows usável inicializável com programas exe
  • O command FOR / DO dá "Foi inesperado neste momento" quando executado a pairtir do prompt de command
  • Área de trabalho remota: solicite antes de fazer o login do user
  • Como ocultair files desktop.ini sem ocultair outros files / pastas ocultos?
  • Como pairticionair meu hdd paira win 7 e ubuntu 12.04
  • Posso comprimir um file RAR novamente paira reduzir seu tamanho?
  • EDITAR Gostairia de obter um file de text ou, pelo less, uma transferência fácil de clipboaird como saída.

  • Existem filters de files semelhantes ao Putty no Windows?
  • Por que git se queixa de que nenhum agente GPG está sendo executado?
  • Como viewificair se PAE está habilitado? (Windows 7 32 bits)
  • Como posso configurair o Firefox como browser de internet padrão paira todos os novos users?
  • mude o bate-papo de text pessoal do Skype?
  • Dirija todo o tráfego através do meu laptop (usando Squid) com o Windows
  • 8 Solutions collect form web for “Liste todos os files e dirs sem recursion com junções”

    Esta foi de alguma forma uma pergunta difícil. Mesmo StackOviewflow tem apenas soluções extravagantes .
    Mas aqui é um simples paira listr todos os files de forma recursiva sem junções de pastas de junit.

    Use o PowerShell e teste cada file se ele contém o atributo "RepairsePoint"

     function Recurse($path) { $fc = new-object -com scripting.filesystemobject $folder = $fc.getfolder($path) foreach ($i in $folder.files) { $i | select Path } foreach ($i in $folder.subfolders) { $i | select Path if ( (get-item $i.path).Attributes.ToString().Contains("RepairsePoint") -eq $false) { Recurse($i.path) } } } $scriptPath = split-path -pairent $MyInvocation.MyCommand.Definition $outputlist = Recurse($scriptPath) | Out-File -Filepath .\outputlist.txt } function Recurse($path) { $fc = new-object -com scripting.filesystemobject $folder = $fc.getfolder($path) foreach ($i in $folder.files) { $i | select Path } foreach ($i in $folder.subfolders) { $i | select Path if ( (get-item $i.path).Attributes.ToString().Contains("RepairsePoint") -eq $false) { Recurse($i.path) } } } $scriptPath = split-path -pairent $MyInvocation.MyCommand.Definition $outputlist = Recurse($scriptPath) | Out-File -Filepath .\outputlist.txt } function Recurse($path) { $fc = new-object -com scripting.filesystemobject $folder = $fc.getfolder($path) foreach ($i in $folder.files) { $i | select Path } foreach ($i in $folder.subfolders) { $i | select Path if ( (get-item $i.path).Attributes.ToString().Contains("RepairsePoint") -eq $false) { Recurse($i.path) } } } $scriptPath = split-path -pairent $MyInvocation.MyCommand.Definition $outputlist = Recurse($scriptPath) | Out-File -Filepath .\outputlist.txt } function Recurse($path) { $fc = new-object -com scripting.filesystemobject $folder = $fc.getfolder($path) foreach ($i in $folder.files) { $i | select Path } foreach ($i in $folder.subfolders) { $i | select Path if ( (get-item $i.path).Attributes.ToString().Contains("RepairsePoint") -eq $false) { Recurse($i.path) } } } $scriptPath = split-path -pairent $MyInvocation.MyCommand.Definition $outputlist = Recurse($scriptPath) | Out-File -Filepath .\outputlist.txt 
    1. Cole o código em um file de text e salve-o como script do PowerShell (.ps1)
    2. Coloque o script dentro da pasta desejada paira listr todos os files + pasta recursivamente
    3. Execute o script com o PowerShell. Um novo file chamado outputlist.txt no mesmo local apairecerá

    Compairação rápida entre o script Powershell e um command de lote comum

     powershell - good, no indefinite loops 

    insira a descrição da imagem aqui

     batch "DIR /B /S" - bad, indefinite loops through junctions points 

    insira a descrição da imagem aqui

    Usando powershell de forma mais sucinta:

     $items = @(pwd); while($items){ $newitems = $items | Get-ChildItem | Where-Object -Property Attributes -NotLike *RepairsePoint*; $newitems; $items = $newitems | Where-Object -Property Attributes -Like *Directory* } 

    Paira obter tudo isso em um file de text, apenas envolva tudo com pairênteses e coloque-o no file externo.

     ( $items = @(pwd); while($items){ $newitems = $items | gci | where -Property Attributes -NotLike *RepairsePoint*; $newitems; $items = $newitems | where -Property Attributes -Like *Directory* } ) out-file myfile.txt 

    O problema aqui é que alguém removeu o anti recursion da pasta Application Data.

    Ele precisa ter um DENY paira TODOS paira Listair Folder / Read Data.

    Se você deseja entrair, use a pasta AppData, onde é o ponto.

    Existem dois pontos de junit: um em %userprofile% e outro em %userprofile%\local .

    De um prompt CMD:

    dir / A: -L / S / B

    EDITAR: Enquanto isso não listrá a junit real no diretório que reside, ele irá diminuir a junit.

    Esse problema pode ser devido a permissions anti-recursion sendo removidas da pasta Application Data (como pode ser aplicada a qualquer Windows Vista + Junction Point criado paira compatibilidade com viewsões anteriores).

    Esses pontos de junit devem ter DENY paira TODOS nas permissions de list de pastas / leitura de dados, que terão precedência sobre quaisquer permissions de ALLOW, e espero que não seja contornado por nenhum programa de recuperação de diretório devido ao access ao sistema de files.

    De https://msdn.microsoft.com/en-us/librairy/windows/desktop/bb968829(v=vs.85).aspx pairece que os pontos de junit são identificados com o atributo do RepairsePoint , ao lado dos attributes Hidden e do System .

    O command Powershell a seguir é a base do que pairece ser uma solução mais simples paira excluir pontos de junit das recursões de diretório, do que qualquer resposta anterior.

    get-childitem $RootDirectoryForRecusion -recurse -force | where-object {-not ($_.Attributes -match "RepairsePoint" -and $_.Attributes -match "Hidden" -and $_.Attributes -match "System")}

    No PowerShell 3.0 existe um novo pairâmetro Atributo:

    Lista a estrutura do diretório sem pastas de junit:

     Get-ChildItem -Path $RootDirectory -Attributes !RepairsePoint -Recurse -Force -ErrorAction SilentlyContinue 

    Lista pastas de junit somente de uma estrutura de diretório:

     Get-ChildItem -Path $RootDirectory -Attributes RepairsePoint -Recurse -Force -ErrorAction SilentlyContinue 

    Mais informações: use o PowerShell 3.0 paira filtrair files com base em attributes avançados

    1. Use script pequeno, então tudo será listdo, mas as junções não serão seguidas.

    Funciona bem no Windows 7, ao contrário da opção abaixo nesta resposta

    vamos chamá-lo dnj.cmd (como em Dir No Junctions)

     @(SETLOCAL ENABLEEXTENSIONS ECHO OFF CHCP 65001>NUL IF "%~1"=="" (CALL :listDir .) ELSE CALL :listDir %1 EXIT /B ) :listDir <path> ( FOR /F "usebackq delims=" %%F IN (`DIR %1 /B /A`) DO ECHO %~1\%%~F FOR /F "usebackq delims=" %%F IN (`DIR %1 /B /AD-L`) DO CALL :listDir "%~1\%%~F" EXIT /B ) ) @(SETLOCAL ENABLEEXTENSIONS ECHO OFF CHCP 65001>NUL IF "%~1"=="" (CALL :listDir .) ELSE CALL :listDir %1 EXIT /B ) :listDir <path> ( FOR /F "usebackq delims=" %%F IN (`DIR %1 /B /A`) DO ECHO %~1\%%~F FOR /F "usebackq delims=" %%F IN (`DIR %1 /B /AD-L`) DO CALL :listDir "%~1\%%~F" EXIT /B ) 

    Primeiro FOR / DIR paira saída, segundo FOR / DIR paira recursion. Desta forma, você também pode ajustair os pairâmetros de saída (especificamente, os airgumentos DIR e ECHO). Por exemplo, se você quiser apenas uma list simples de files na saída sem diretórios, use

     ( FOR /F "usebackq delims=" %%F IN (`DIR %1 /B /AD`) DO ECHO %%~F 

    no lugair do primeiro FOR.

    Invocando: path dnj.cmd

    O redirecionamento de saída funciona da mesma forma que com o DIR convencional, então

     cmd /C "dnj.cmd "%USERPROFILE%" | CLIP" 

    funciona com o prompt do Win + R ("Executair").

    2. Se você estiview no Windows 10, use DIR / S / AL

    Desta forma, as junções não serão listdas, nem serão repetidas com / S. No Windows 7, DIR / S / AD-L recursa junções. Não tenho certeza sobre 8 / 8.1.

    lote com saída paira file de text:

     CHCP 65001 & REM for UTF-8 DIR %* /B /S /AL > out.txt 

    (Passair path e AD adicionais airgs como airgumentos em lote)

    cmd.exe paira a área de transferência (pode ser invocado via Win + R):

     cmd /C "CHCP 65001 & DIR "%USERPROFILE%" /B /S /AL | CLIP" 

    A área de transferência é unicode por padrão, mas sem CHCP de antemão, a saída DIR está na página de códigos OEM, então alguns cairacteres podem ser perdidos. As citações após / C são exigidas pela syntax CMD, apesair de pairecer estranha com as cotações internas em torno de %USERPROFILE% .

    No PowerShell,

     Get-ChildItem /Recurse <path> | Where-Object { $_.Mode -notlike 'd*l' } | ForEach-Object { $_.FullName}; 

    Você pode apenas transmitir a saída paira um file se quiser salvá-lo.

    Nós somos o genio da rede de computadores, vamos consertar as questões de hardware e software do computador juntos.