Fichier de commandes nécessaire pour interroger un emplacement spécifique


0

Je ne suis pas un codeur et apprécierais toute aide.

J'ai besoin d'un fichier de commandes qui interrogera un emplacement NAS et produira une sortie des répertoires de niveau supérieur (et peut-être du deuxième niveau vers le bas). La structure du fichier est la suivante:

\\NAS-ip\home\user1
\\NAS-ip\home\user2
\\NAS-ip\home\user3
\\NAS-ip\home\user4
        ︙
\\NAS-ip\home\user99

La sortie par lots devrait être:

\\NAS-ip\home\user1,\\NAS-ip\home\user2,\\NAS-ip\home\user3,\\NAS-ip\home\user4 … etc.

Sous quel système d'exploitation allez-vous exécuter cela? Cela pourrait être plus facile à faire dans PowerShell que batch, si vous utilisez Vista ou une version ultérieure.
— Iszi

Une rapide recherche sur Google semble indiquer que c'est faisable via batch ou PowerShell. Ce n'est pas très difficile, mais pas aussi simple qu'on pourrait le souhaiter.
— Iszi

Exécution de Windows 2008 x64. J'ai essayé de le doser sans succès. Et pas familier avec Powershell
— Hondo

1
Si vous utilisez 7/2008 ou une version ultérieure, et si vous envisagez de procéder à des ajustements réguliers de l'administration système ou des utilisateurs expérimentés, je vous suggère fortement de vous familiariser avec PowerShell. C'est effectivement le nouveau CMD.
— Iszi

Vous voulez donc que la sortie soit une seule ligne de plus de 2000 caractères (c.-à-d. Large)?
— G-Man

Réponses:


0

Powershell:

Lisible par l'homme:

(@{Path = '\\NAS-ip\home' ; Levels = '2'} |
    ForEach-Object {
        Get-ChildItem -Path ($_.Path + ((@('\*') * $_.Levels) -join '')) |
            Where-Object {$_.PsIsContainer} | Select-Object -ExpandProperty FullName
    }) -join ','

Bon mot:

(@{Path = '\\NAS-ip\home' ; Levels = '2'} | ForEach-Object {Get-ChildItem -Path ($_.Path + ((@('\*') * $_.Levels) -join '')) | Where-Object {$_.PsIsContainer} | Select-Object -ExpandProperty FullName}) -join ','

Compact:

(@{Path = '\\NAS-ip\home' ; Levels = '2'} | % {gci ($_.Path + ((@('\*') * $_.Levels) -join '')) | ? {$_.PsIsContainer} | select -Exp FullName}) -join ','

Changer Pathet Levelscomme bon vous semble. Et je vous conseille de changer le séparateur de ,quelque chose comme |, parce que la virgule est autorisée dans les noms de fichiers et peut entraîner une ambiguïté. Pour changer de séparateur, éditez le dernier -join ','en -join '|'.

Bonus: pour obtenir la liste des sous-répertoires dans plusieurs chemins initiaux, séparez les hashtables au début par une virgule:

(@{Path = '\\NAS-ip\home' ; Levels = '2'}, @{Path = '\\NAS2-ip\somedir' ; Levels = '3'} |
    ForEach-Object {
        Get-ChildItem -Path ($_.Path + ((@('\*') * $_.Levels) -join '')) |
            Where-Object {$_.PsIsContainer} | Select-Object -ExpandProperty FullName
    }) -join ','
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.