Existe uma ferramenta nativa portátil que pode me dar um unicode ou uma lista compatível com o sistema local de todos os arquivos e diretórios em um caminho recursivamente , sem recursão em pontos de junção ou links, no Windows?
Por exemplo, os dir
takedown
icacls
comandos internos são executados em um loop infinito com o diretório Application Data ( 1 ).
EDIT Eu gostaria de ser capaz de obter um arquivo de texto ou pelo menos uma transferência fácil da área de transferência como uma saída.
os.walk
), porque eu preferiria uma solução mais facilmente portátil (por exemplo, uma ferramenta de arquivo único menor)/L
sinalizador para impedir que ele realmente faça qualquer cópia.robocopy /XJ /L /E <dir> <dummy-target>
, a/XJ
bandeira pula as junções e as/L
causas para listar apenas!/E
é para recursão. Problema: muito detalhado. Mas ele pode ser feito um pouco melhor com uma compilação win32 do grep da GNU:robocopy /XJ /L /E <dir> <dummy-target> | grep -i "new dir\|new file"
. Ainda precisa "aplicar" o diretório de contenção para cada arquivo.Respostas:
Esta foi de alguma forma uma questão difícil. Mesmo o StackOverflow tem apenas soluções sofisticadas .
Mas aqui está um simples para listar todos os arquivos recursivamente sem loops de pastas de junção.
Use o PowerShell e teste cada arquivo se ele contiver o atributo "ReparsePoint"
outputlist.txt
no mesmo local apareceráComparação rápida entre o script Powershell e um comando em lote comum
fonte
junction.exe
em uma pasta para si mesma e, infelizmente, para mim , entreiDirectory List & Print
em recursão.powershell -ExecutionPolicy Unrestricted -File <yourfilename-here.ps1>
irá executar o script (minha associação de arquivos foi definida para o bloco de notas :)).Usando o powershell de forma mais sucinta:
Para colocar tudo isso em um arquivo de texto, basta colocar a coisa toda entre parênteses e enviá-la para fora do arquivo.
fonte
O problema aqui é que alguém removeu a anti-recursão da pasta Application Data.
Ele precisa ter um DENY para TODOS para Listar Pasta / Ler Dados.
Se você quiser entrar, use a pasta AppData, que é onde ela aponta.
Existem dois pontos de junção - um em
%userprofile%
e outro em%userprofile%\local
.fonte
O original link simbólico para
Application Data
tem permissões especiais e atributos para evitarEveryone
de ler ou a ver o conteúdo da pasta de destino (através do link simbólico ). Isso evita que os programas sejam capturados em um loop recursivo. Você pode reaplicar facilmente as permissões e os atributos, mas tenha muito cuidado para aplicar apenas essas permissões e atributos ao link simbólico e não a arquivos ou pastas reais. O link simbólico será um ícone no Windows Explorer com uma seta de atalho na parte superior de um ícone de pasta.alt
tecla e clique em Ferramentas , em Opções e , em seguida, clique na guia Exibir[ ] Hide protected operating system files
e ative a opção para(x) Show hidden files, folders, or drives
.C:\Users\[user]\AppData\Local
Application Data
link simbólico e escolha Propriedades ( certifique-se de que ele seja o link simbólico e não uma pasta real - ele deve ter uma seta de atalho como uma sobreposição na parte superior de um ícone de pasta )Everyone
e defina os direitos paraEveryone
:SYSTEM
e continue clicando em OK até voltar ao Windows ExplorerA recursão está agora desativada. Há mais uma coisa que você pode querer fazer. A maioria desses tipos de links simbólicos tem atributos de arquivo especiais para que eles não sejam visíveis para os usuários. Abra um prompt de comando e execute os seguintes comandos:
A
/L
opção dizattrib
para aplicar+S +H +I
ao link simbólico , em vez de aplicá-lo à pasta de destino (C:\Users\[user]\AppData\Local
).Se você errar, poderá remover facilmente o link simbólico e recriá-lo em um prompt de comando . Tenha cuidado para recriar para que aponte para a mesma pasta que antes. O
dir /a
comando mostrará para ondeApplication Data
aponta. Você deve redigitar a pasta de destino textualmente como o parâmetro final domklink
comando.Agora você tem um
Application Data
link simbólico que tem o problema de recursão. Então, basta seguir as etapas acima para corrigir o problema de recursão.Não se esqueça de alterar as configurações na etapa 3 de volta para seus valores originais, para que você não continue vendo os arquivos que devem estar ocultos.
fonte
1. Use um script pequeno, então tudo será listado, 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)Primeiro FOR / DIR para saída, segundo FOR / DIR para recursão. Dessa forma, você também pode ajustar os parâmetros de saída (especificamente, os argumentos DIR e ECHO). Por exemplo, se você deseja apenas uma lista simples de arquivos na saída sem diretórios, use
no lugar do primeiro FOR.
Invocando:
dnj.cmd
path [path [...]]
O redirecionamento de saída funciona da mesma maneira que com o DIR convencional,
funciona a partir do prompt do Win + R ("Executar").
2. Se você estiver no Windows 10, use DIR / S / AL
Desta forma, junções não serão listadas, nem serão retornadas com / S. No Windows 7, o DIR / S / AD-L recorre a junções. Não tenho certeza sobre 8 / 8.1.
lote com saída para arquivo de texto:
(caminho de passagem e argumentos DIR adicionais como argumentos em lote)
cmd.exe para área de transferência (pode ser chamado via Win + R):
A área de transferência é unicode por padrão, mas sem o CHCP antecipadamente, a saída DIR está na página de códigos OEM, portanto, alguns caracteres podem ser perdidos. As cotações após / C são exigidas pela sintaxe do CMD, apesar de parecer estranho com cotações internas ao redor
%USERPROFILE%
.fonte
DIR %1 /B /A
) DO (SET I = "% ~ 1 \ %% F" SET J =! I: "= ECHO! J!) FOR / F "usebackq delims =" %% F IN (DIR %1 /B /AD-L
) DO (SET I = "% ~ 1 \ %% F" CALL: listDir! I!) EXIT / B)ECHO %%~F
de(
... o)
grupo funciona de maneira melhor.De um prompt do CMD:
EDIT: Enquanto isso não irá listar a junção real no diretório que reside, ele irá recuar a junção.
fonte
Esse problema pode ser devido a permissões de recursão anti sendo removidas da pasta Application Data (como pode se aplicar a qualquer Windows Vista + ponto de junção criado para compatibilidade com versões anteriores).
Esses pontos de junção devem ter DENY para TODOS em permissões de Listar Pasta / Ler Dados, o que terá precedência sobre qualquer permissão ALLOW, e esperamos que não seja contornado por nenhum programa de recursão de diretório devido à maneira como ele acessa o sistema de arquivos.
De https://msdn.microsoft.com/en-us/library/windows/desktop/bb968829(v=vs.85).aspx , parece que os pontos de junção são identificados por ter o
ReparsePoint
atributo, juntamente com os atributosHidden
eSystem
.O seguinte comando Powershell é a base do que parece ser uma solução mais simples para excluir pontos de junção de recursões de diretório do que qualquer resposta anterior.
get-childitem $RootDirectoryForRecusion -recurse -force | where-object {-not ($_.Attributes -match "ReparsePoint" -and $_.Attributes -match "Hidden" -and $_.Attributes -match "System")}
fonte
No PowerShell 3.0, há um novo parâmetro Attribute:
Lista a estrutura de diretórios sem pastas de junção:
Lista pastas de junção apenas de uma estrutura de diretórios:
Mais informações: Use o PowerShell 3.0 para filtrar arquivos com base em atributos avançados
fonte
No PowerShell,
Você pode simplesmente canalizar a saída para um arquivo se quiser salvá-lo.
fonte
-Recurse
não/Recurse
Boa resposta embora.<path>\mysim
mas seria recursiva e mostrada<path>\mysim\myfile
.Isso pode não ser uma ferramenta nativa, mas pode ser útil para alguém com o Windows 7, há um programa chamado FileLocator Pro que tem uma opção em Advanced / Junction Points para desativar os pontos de junção de pesquisa.
Uma vez feito isso, você pode usar o programa de linha de comando flpsearch assim:
Há guias literais lá depois dos ecos e delims, portanto, certifique-se de que o editor de texto não esteja convertendo guias em espaços.
Espero que isso possa ser útil para um usuário do Win7 ou dois.
Ofc as opções de powershell também são boas, mas o DOS é outra história.
fonte