Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Переименование первых подпапок в каждой папке (http://forum.oszone.net/showthread.php?t=270569)

ruslaw 24-10-2013 02:17 2239954

Переименование первых подпапок в каждой папке
 
Можно ли создать батник который входил в некую Главную папку, имеющую множество подпапок с разными уровнями вложения и со всеми этими подпапками (всех уровней вложения) проделывал бы следующее - брал бы первую из них (как они расположены в папке) и добавлял в имя какой-то знак (например - @) спереди.

sunnykey 24-10-2013 13:17 2240160

Цитата:

Цитата ruslaw:
Можно ли создать батник который входил в некую Главную папку, имеющую множество подпапок с разными уровнями вложения и со всеми этими подпапками (всех уровней вложения) проделывал бы следующее - брал бы первую из них (как они расположены в папке) и добавлял в имя какой-то знак (например - @) спереди.
Хочу уточнить фразу "как они расположены в папке". А как они у вас расположены? В алфавитном порядке, по возрастанию размера или по-другому отсортированы (это вопрос к проводнику)? На powershell решается просто
Код:

function RenameFolder ($folderPath) {
    if ($CurPath=gci $folderPath.FullName | ? `
        {$_.PsIsContainer -eq $true} | sort | select -First 1) {
              RenameFolder ($CurPath)
    }
    $NewfolderPath=(Split-Path $folderPath.FullName -Parent)+"\@"+`
          (Split-Path $folderPath.FullName -Leaf)
    Rename-Item $folderPath.FullName -NewName $NewfolderPath -WhatIf
}

RenameFolder (gci "D:\Downloads" | ? {$_.PsIsContainer -eq $true} | `
        sort | select -First 1)


Iska 24-10-2013 14:58 2240260

Цитата:

Цитата sunnykey
А как они у вас расположены? В алфавитном порядке, по возрастанию размера или по-другому отсортированы (это вопрос к проводнику)? »

Это вопрос к файловой системе. На NTFS — всегда в лексикографическом, на FATx — в порядке поступления в каталог.

Гуллипут 24-10-2013 23:50 2240636

Если без разных уровней вложений, то просто:
cd /d "Главная Папка"

for /F "delims=" %%d in ('dir /A:D *.*') do (
move %%d @%%~nxd
goto e
)
:e


C вложениями - сложнее. Надо подумать.


Вот придумал и отладил:
Код:

cd /d "Главная Папка"
call :one_dir
for /D /R %%f in (*.*) do (
pushd %%f
call :one_dir
popd
)
goto :eof
:one_dir
for /F "delims=" %%d in ('dir /B /A:D *.*') do (
  move %%d @%%~nxd
  goto :eof
)

Единственное, что меня смутило: противоречие темы и текста сообщения. В теме идёт речь о VBS/WSH/JS, а в тексте - о батнике. Это же разные языки !

ruslaw 25-10-2013 10:36 2240773

А как они у вас расположены? - Да, в алфавитном порядке (по имени)


Время: 07:03.

Время: 07:03.
© OSzone.net 2001-