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.
Hondo
la source
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 ','
beatcracker
la source