AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / computer / Perguntas / 1441609
Accepted
mrgou
mrgou
Asked: 2019-05-28 00:05:10 +0800 CST2019-05-28 00:05:10 +0800 CST 2019-05-28 00:05:10 +0800 CST

Recupere o conteúdo da pasta e da subpasta para CSV com caminhos relativos

  • 772

Achei isso para obter o conteúdo de uma pasta e sua subpasta (somente arquivos) em um arquivo CSV:

dir -recurse | Where-Object { !$_.PSIsContainer } | Select FullName |
convertto-csv | out-file "test.csv"

No entanto, em vez do caminho completo, gostaria de obter o caminho relativo (relativo à raiz de onde executo o comando).

Alguém pode ajudar?

Obrigado!

powershell command-line
  • 2 2 respostas
  • 1784 Views

2 respostas

  • Voted
  1. Best Answer
    LotPings
    2019-05-28T00:45:22+08:002019-05-28T00:45:22+08:00

    Uma maneira de obter um arquivo CSV adequado é agrupar a saída do meu comentário:

    Get-ChildItem -Recurse -Name -File | 
      ForEach-Object -begin {'"RelativePath"'}{'"{0}"' -f $_}|
        Out-File "test.csv"
    

    Ou use uma propriedade calculada para remover o diretório inicial da FullNamepropriedade.

    $StartDir = "$ENV:USERPROFILE\Documents\"
    Get-ChildItem -Path $StartDir -File -Recurse |
      Select-Object @{n='RelativePath';e={$_.FullName -replace [regex]::escape($StartDir)}}|
        Export-Csv 'test.csv' -NoTypeInformation
    
    • 0
  2. postanote
    2019-05-28T01:09:02+08:002019-05-28T01:09:02+08:00

    Esta pergunta se traduz na impressão de que você é muito novo no PowerShell. Portanto, é vital que você se intensifique para limitar / evitar equívocos, maus hábitos, erros e sérias frustrações, que você certamente encontrará. Acesse YouTube/MSDN Channel9 e procure por PowerShell inicial, intermediário e avançado, bem como gerenciamento de sistema de arquivos PowerShell e gerenciamento de arquivos e pastas PowerShell.

    O PowerShell, em muitos casos, tentará coagir as coisas, mas não tentará descobrir o que você deseja fazer. Você tem que dizer o que fazer. Bem, isso é verdade para qualquer linguagem de computador.

    Seu problema aqui é o que você diz...

    (em relação à raiz de onde executo o comando)

    ... bem, você pode estar em um caminho que está no nível X de profundidade da unidade raiz, então, agora você está em um filho, e a extrapolação é que você deseja isso apenas do filho. Aqui está o problema com esse processo de pensamento.

    Salve isso em um arquivo de texto, então nunca teria o caminho da unidade e, como tal, quando você voltar a usá-lo, você terá que saber disso e colocá-lo de volta manualmente para usar os arquivos novamente.

    Portanto, não tenho certeza de qual é o seu caso de uso, para esse esforço, mas logicamente ele voltará para mordê-lo.

    Então, digamos, eu estou aqui:

    Push-Location -Path 'E:\Temp'
    

    Então nós executamos isso

    Get-ChildItem -recurse | 
    Where-Object { !$_.PSIsContainer } | Select-Object -Property  FullName 
    
    # Results
    
    FullName                                                            
    --------                                                            
    E:\Temp\about_ReGet-ChildItemection  Microsoft Docs.url                       
    ...                                     
    E:\Temp\ZipMultiFolder.zip                                          
    E:\Temp\Folder\Log_20190419.txt                                     
    ...                               
    E:\Temp\Reports\NewFiles.zip                                        
    ...  
    

    Então, aqui nós apenas pegamos a localização atual...

    Get-ChildItem -recurse | 
    Where-Object { !$_.PSIsContainer } | 
    Select-Object -Property  @{Name = 'RelativePath';Expression = {"\$($pwd.Drive.CurrentLocation)\$($PSItem.Name)"}}
    

    Portanto, aqui apenas obtemos o caminho atual em que estamos e solicitamos apenas o nome do arquivo, não o nome completo

    # Results
    
    RelativePath 
    ------------                                                            
    \Temp\about_ReGet-ChildItemection  Microsoft Docs.url                       
    ...                                     
    \Temp\ZipMultiFolder.zip                                          
    \Temp\Folder\Log_20190419.txt                                     
    ...                               
    \Temp\Reports\NewFiles.zip                                        
    ... 
    

    Se enviarmos isso para um CSV, você não tem ideia de qual unidade veio. Portanto, agora você precisa pesquisar todas as unidades em sua máquina para encontrá-las ou lembrar onde estava quando fez isso.

    Indo uma criança para baixo, a mesma coisa. Claro, você entendeu isso, mas onde está realmente? Em seu sistema ou em alguma unidade de rede para a qual você mapeou.

    Push-Location -Path 'E:\Temp\Folder'
    

    Então nós executamos isso

    Get-ChildItem -recurse | 
    Where-Object { !$_.PSIsContainer } | Select-Object -Property  FullName 
    
    # Results
    
    FullName                                   
    --------                                   
    E:\Temp\Folder\Log_20190419.txt            
    E:\Temp\Folder\New Bitmap Image.bmp        
    E:\Temp\Folder\New Text Document - Copy.txt
    E:\Temp\Folder\New Text Document.txt  
    
    
    Get-ChildItem -recurse | 
    Where-Object { !$_.PSIsContainer } | 
    Select-Object -Property  @{Name = 'RelativePath';Expression = {"\$($pwd.Drive.CurrentLocation)\$($PSItem.Name)"}}
    
    
    RelativePath                             
    ------------                             
    \Temp\Folder\Log_20190419.txt            
    \Temp\Folder\New Bitmap Image.bmp        
    \Temp\Folder\New Text Document - Copy.txt
    \Temp\Folder\New Text Document.txt  
    

    E se você está dizendo, aqui, você não quer a raiz pai, então você remove isso.

    No entanto, isso significa que você não apenas não sabe de qual unidade veio, mas também não sabe de qual raiz pai veio.

    Então, apenas diga.

    BTW, é uma prática recomendada usar o nome completo do cmdlet em scripts. Atalhos / pseudônimos são bons para coisas interativas. Claro, todos nós estamos acostumados a usar 'dir', mas a abreviação Get-ChildItem é 'gci', que é tão curto quanto fez, mas, você sabe.

    Get-Alias -Definition Get-ChildItem | 
    Format-Table -AutoSize
    
    
    
    CommandType Name                 Version Source
    ----------- ----                 ------- ------
    Alias       dir -> Get-ChildItem               
    Alias       gci -> Get-ChildItem               
    Alias       ls -> Get-ChildItem  
    

    Mas ei, os hábitos são realmente difíceis de quebrar. ;-} --- --- e as decisões prudentes são aquelas que funcionam para nós, independente do que os outros pensem. ;-}

    Bem, aqueles que seguem você se posicionam. Portanto, ser um bom cidadão do PowerShell é realmente uma coisa boa.

    BTW, se você fosse fazer isso em um script, também existe uma variável automática para esse tipo de coisa. Bem, obtendo o local onde o script foi executado e qualquer coisa associada a esse local.

    Veja este artigo.

    Adicione flexibilidade de script com caminhos de arquivo relativos

    • 0

relate perguntas

  • Adicionando cor de primeiro plano ao perfil do Powershell?

  • Qual seria o equivalente em lote do argumento "pass" do Python?

  • Não é possível ativar o Microsoft Print to PDF depois de desativado

  • Posso fazer com que este script do PowerShell aceite vírgulas?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    O visualizador de fotos do Windows não pode ser executado porque não há memória suficiente?

    • 5 respostas
  • Marko Smith

    Como faço para ativar o WindowsXP agora que o suporte acabou?

    • 6 respostas
  • Marko Smith

    Área de trabalho remota congelando intermitentemente

    • 7 respostas
  • Marko Smith

    Serviço do Windows 10 chamado AarSvc_70f961. O que é e como posso desativá-lo?

    • 2 respostas
  • Marko Smith

    O que significa ter uma máscara de sub-rede /32?

    • 6 respostas
  • Marko Smith

    Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows?

    • 1 respostas
  • Marko Smith

    O VirtualBox falha ao iniciar com VERR_NEM_VM_CREATE_FAILED

    • 8 respostas
  • Marko Smith

    Os aplicativos não aparecem nas configurações de privacidade da câmera e do microfone no MacBook

    • 5 respostas
  • Marko Smith

    ssl.SSLCertVerificationError: falha na verificação do certificado [SSL: CERTIFICATE_VERIFY_FAILED]: não foi possível obter o certificado do emissor local (_ssl.c:1056)

    • 4 respostas
  • Marko Smith

    Como posso saber em qual unidade o Windows está instalado?

    • 6 respostas
  • Martin Hope
    Albin Como faço para ativar o WindowsXP agora que o suporte acabou? 2019-11-18 03:50:17 +0800 CST
  • Martin Hope
    fixer1234 O "HTTPS Everywhere" ainda é relevante? 2019-10-27 18:06:25 +0800 CST
  • Martin Hope
    Kagaratsch O Windows 10 exclui muitos arquivos minúsculos muito lentamente. Algo pode ser feito para agilizar? 2019-09-23 06:05:43 +0800 CST
  • Martin Hope
    andre_ss6 Área de trabalho remota congelando intermitentemente 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney Por que colocar um ponto após o URL remove as informações de login? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    Inter Sys Como Ctrl+C e Ctrl+V funcionam? 2019-05-15 02:51:21 +0800 CST
  • Martin Hope
    jonsca Todos os meus complementos do Firefox foram desativados repentinamente, como posso reativá-los? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK É possível criar um código QR usando texto? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 Altere o nome da ramificação padrão do git init 2019-04-01 06:16:56 +0800 CST

Hot tag

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve