Войти

Показать полную графическую версию : [решено] Скопировать название каталогов в файл с параметрами


aks.05
04-09-2013, 14:00
Добрый день!
На работе есть такая очень срочная задача:
Нужно скопировать имена всех хранящихся каталогов и (Внимание!) подкаталогов только первого уровня вложенности в текстовый файл, в котором можно было бы показать пробелом или табом имя каталога и подкаталогов. Имена папок могут быть с пробелами, на кириллице/латинице.

Пример:
"Папка1 содержит Подпапку1.1 и Подпапку1.2;
Папка2 содержит Подпапку2.1;
Папка3 не содержит вложенных подкаталогов;
и т.д."

В файле пример.txt должна быть запись вида:
"Папка1 Подпапка1.1 Подпапка1.2
Папка2 Подпапка2.1
Папка3
..."
Очень прошу, помогите пожалуйста создать Bat файл. Весь интернет перекопал, но ничего такого не нашел...

Iska
04-09-2013, 15:26
В файле пример.txt должна быть запись вида:
"Папка1 Подпапка1.1 Подпапка1.2
Папка2 Подпапка2.1
Папка3
..." »
Потрясающе. Особенно с учётом:
Имена папок могут быть с пробелами… »
PowerShell:
$sRootPath = "C:\Windows"
$sResultFile = "C:\Песочница\031\пример.txt"

([System.IO.FileInfo]$sRootPath).FullName | Out-File -FilePath $sResultFile

Get-ChildItem -Path $sRootPath -Force |`
ForEach-Object -Process {
if($_.PsIsContainer) {
"`t$($_.Name)" | Out-File -FilePath $sResultFile -Append

Get-ChildItem -Path $_.FullName -Force |`
ForEach-Object -Process {
if($_.PsIsContainer) {
"`t`t$($_.Name)" | Out-File -FilePath $sResultFile -Append
}
}
}
}


C:\Windows
$968930Uinstall_KB968930$
spuninst
$NtUninstallKB968930$
ru
addins
AppPatch
assembly
GAC
GAC_32


Cursors
Debug
UserMode
Downloaded Program Files
Driver Cache
i386
ehome
Fonts

aks.05
04-09-2013, 15:53
Супер! Огромное Спасибо!
А можно сделать так чтобы родительские каталоги сортировались по их дате создания, от самого раннего до самого позднего?

Iska
04-09-2013, 16:39
от самого раннего до самого позднего? »
Теперь бы ещё на русский перевести. «Более ранний» — это старше возрастом? Или наоборот?

Чем старше — тем раньше:
$sRootPath = "C:\Windows"
$sResultFile = "C:\Песочница\031\пример.txt"

([System.IO.FileInfo]$sRootPath).FullName | Out-File -FilePath $sResultFile

Get-ChildItem -Path $sRootPath -Force | Sort-Object -Property "CreationTime" |`
ForEach-Object -Process {
if($_.PsIsContainer) {
"`t$($_.Name)" | Out-File -FilePath $sResultFile -Append

Get-ChildItem -Path $_.FullName -Force | Sort-Object -Property "CreationTime" |`
ForEach-Object -Process {
if($_.PsIsContainer) {
"`t`t$($_.Name)" | Out-File -FilePath $sResultFile -Append
}
}
}
}

Если надо наоборот — добавьте параметр «-Descending» в оба командлета «Sort-Object».

aks.05
05-09-2013, 07:34
Все понятно! Большое спасибо!




© OSzone.net 2001-2012