1 (изменено: alexii, 2012-07-12 10:22:50)

Тема: CMD/BAT: по сети переименовать файлы

Доброе утро.

Необходимо переименовать файлы в сетевой папке.

1. Взять название папки. Это будет будущее название файла.
2. Изменить кириллицу на транслит.
3. Старый файл оставить как есть.

Возможно ли это сделать?
И, если было, подскажите ссылку.

Заранее благодарен.

2

Re: CMD/BAT: по сети переименовать файлы

Имя подкаталога из переданного пути можно будет выделить разложением строки на составляющие командой "FOR".
В папке может быть только один файл, что Вы по нему имя файла задаете?

ps. считаю, что транслит, да и весь остальной сценарий, легче организовать на vbscript.

WBR. Roman

3

Re: CMD/BAT: по сети переименовать файлы

Ориентировочно в ноябре 2008 г. я создал в разделе "AutoHotkey - разработка" похожую тему. Кто-то предложил аналог то ли на CMD/BAT, то ли на VBS. Если есть желание, поднимите архив, покопайтесь.

4 (изменено: bugagashi, 2012-07-13 13:44:45)

Re: CMD/BAT: по сети переименовать файлы

Сделать это возможно.
Нужно без vbs.
Как заменить на транслит рус. буквы? Нужно обязательно в локалке.

Menu, Tray, Icon, %SystemRoot%\system32\fontext.dll
#NoTrayIcon
foldersel=%A_ScriptDir%
Gui, Add, Edit, r1 w300  yp+15          vfoldersel, %foldersel%
Gui, Add, Button,  xp+300 default w80 , Обзор... ;
Gui, Add, Checkbox, Checked1  xp-300 yp+40 valertfaili, переименовывать файлы
Gui, Add, Checkbox, Checked1  valertpapki, переименовывать папки
Gui, Add, Checkbox, Checked1  vrec, смотреть в подпапках
Gui, Add, Checkbox, Checked1  vprobel, заменять [пробел] на [ _ ]
Gui, Add, Button, xp+20 yp+40 default w100 ,Переименовать
Gui, Add, GroupBox, xp+160 yp-95 Center R5.5 w200, Типы объектов
Gui, Add, Radio, gextent  Checked1  xp+15 yp+15 vext, ВСЕ
Gui, Add, Radio, gextent , с расширением
Gui, Add, ComboBox , disabled Uppercase xp+125 w50 vextchoice, TXT|JPG|ZIP|MP3|EXE|LNK|URL
Gui, Add, Checkbox, Checked1  xp-125 yp+30 vreadonly, только для чтения
Gui, Add, Checkbox, Checked1  vhide, скрытые
Gui, Add, Checkbox, Checked1  vsystem, системные
extent:
ControlGet, variab, Checked,, Button8, 
If variab = 1
Control, Disable,, ComboBox1,
else
Control, Enable,, ComboBox1,
Gui, Show, w400 h200, Транслитерация имён файлов и папок
return
ButtonОбзор...:
FileSelectFolder, obzor, ,
IF (obzor<>"")
GuiControl,, foldersel, %obzor%
return
ButtonПереименовать:
Gui, Submit, nohide
SetWorkingDir %foldersel%
IF hide=0 
attr1=H,
else attr1=""
IF readonly=0
attr2=R,
else attr2=""
IF system=0 
attr3=S,
else attr3=""
IF ext=1
extention=*
ELSE
extention = %extchoice%
IF alertfaili=1
incl=0
IF alertpapki=1
incl=2
IF (alertpapki=1 and alertfaili=1)
incl=1
IF (alertpapki=0 and alertfaili=0)
return
var := 0
loop *.%extention%, %incl%, %rec%
{
IF A_LoopFileAttrib contains %attr1%%attr2%%attr3%
continue
var := var + 1
f%var% = %A_LoopFilename%
d%var% = %A_LoopFileDir%
}
LOOP, %var%
{
file    := f%var%
fvarbu  := f%var%
dvarbu  := d%var%
StringReplace, file, file, а , a , All
StringReplace, file, file, б , b , All
StringReplace, file, file, в , v , All
StringReplace, file, file, г , g , All
StringReplace, file, file, д , d , All
StringReplace, file, file, е , e , All
StringReplace, file, file, ё , jo , All
StringReplace, file, file, ж , zh , All
StringReplace, file, file, з , z , All
StringReplace, file, file, и , i , All
StringReplace, file, file, й , jj , All
StringReplace, file, file, к , k , All
StringReplace, file, file, л , l , All
StringReplace, file, file, м , m , All
StringReplace, file, file, н , n , All
StringReplace, file, file, о , o , All
StringReplace, file, file, п , p , All
StringReplace, file, file, р , r , All
StringReplace, file, file, с , s , All
StringReplace, file, file, т , t , All
StringReplace, file, file, у , u , All
StringReplace, file, file, ф , f , All
StringReplace, file, file, х , kh , All
StringReplace, file, file, ц , c , All
StringReplace, file, file, ч , ch , All
StringReplace, file, file, ш , sh , All
StringReplace, file, file, щ , shh , All
StringReplace, file, file, ъ , " , All
StringReplace, file, file, ы , y , All
StringReplace, file, file, ь , ' , All
StringReplace, file, file, э , eh , All
StringReplace, file, file, ю , ju , All
StringReplace, file, file, я , ja , All
StringReplace, file, file, А , A , All
StringReplace, file, file, Б , B , All
StringReplace, file, file, В , V , All
StringReplace, file, file, Г , G , All
StringReplace, file, file, Д , D , All
StringReplace, file, file, Е , E , All
StringReplace, file, file, Ё , Jo , All
StringReplace, file, file, Ж , Zh , All
StringReplace, file, file, З , Z , All
StringReplace, file, file, И , I , All
StringReplace, file, file, Й , Jj , All
StringReplace, file, file, К , K , All
StringReplace, file, file, Л , L , All
StringReplace, file, file, М , M , All
StringReplace, file, file, Н , N , All
StringReplace, file, file, О , O , All
StringReplace, file, file, П , P , All
StringReplace, file, file, Р , R , All
StringReplace, file, file, С , S , All
StringReplace, file, file, Т , T , All
StringReplace, file, file, У , U , All
StringReplace, file, file, Ф , F , All
StringReplace, file, file, Х , Kh , All
StringReplace, file, file, Ц , C , All
StringReplace, file, file, Ч , Ch , All
StringReplace, file, file, Ш , Sh , All
StringReplace, file, file, Щ , Shh , All
StringReplace, file, file, Ъ , " , All
StringReplace, file, file, Ы , Y , All
StringReplace, file, file, Ь , ' , All
StringReplace, file, file, Э , Eh , All
StringReplace, file, file, Ю , Ju , All
StringReplace, file, file, Я , ja , All
IF probel=1
StringReplace, file, file, %A_SPACE%, _, All
IF alertpapki=1
{
    if (dvarbu<>"")
    FileMoveDir, %dvarbu%\%fvarbu%, %dvarbu%\%file%
    else
FileMoveDir, %fvarbu%, %file%
}
IF alertfaili=1
{
    if (dvarbu<>"")
    filemove, %dvarbu%\%fvarbu%, %dvarbu%\%file%
    else
filemove, %fvarbu%, %file%
}
var := var - 1    
}
return
GuiClose:
ExitApp

У меня в win7 не работает.
Почему?
спасибо.

5

Re: CMD/BAT: по сети переименовать файлы

bugagashi пишет:

Как заменить на транслит рус. буквы?

CMD/BAT: транслитерация текста

6

Re: CMD/BAT: по сети переименовать файлы

alexii пишет:
bugagashi пишет:

Как заменить на транслит рус. буквы?

CMD/BAT: транслитерация текста

Это хорошо.
Теперь по сети.
Как организовать?
Папок куча.
И все надо переименовать.

И дополнение к вопросу: Заменить пробелы и точки на "_"
Без последней точки.
"ала.9989ю lit.7.job" -> "ala_9989u_lit_7.job"
как-то так.

for %%g in (*.job) do call :s_subroutine "%%~nxg" "%%g"
:s_subroutine
set _sss=%1
set _ddd=%_sss:.=_%
ren %2 %_ddd%
goto :eof

но он и последнюю точку в поджопник превращает.
меня это расстраивает.

7

Re: CMD/BAT: по сети переименовать файлы

bugagashi пишет:

Это хорошо. Теперь по сети. Как организовать?

Ровно так же, как и для локальных папок.

8

Re: CMD/BAT: по сети переименовать файлы

alexii пишет:
bugagashi пишет:

Это хорошо. Теперь по сети. Как организовать?

Ровно так же, как и для локальных папок.

просто прописать полный путь ?

9

Re: CMD/BAT: по сети переименовать файлы

Угу.

10

Re: CMD/BAT: по сети переименовать файлы

спасибо.

bugagashi пишет:

И дополнение к вопросу: Заменить пробелы и точки на "_"
Без последней точки.
"ала.9989ю lit.7.job" -> "ala_9989u_lit_7.job"

а тут ?

11

Re: CMD/BAT: по сети переименовать файлы

Можно, разложив на подстроки (см. FOR /?) с использованием разграничителя подстрок пробел и точка, в новую строку объединить подстроки уже без разграничителей.
С последней "точкой" надо подумать. Например, можно проверить, что подстрока за ней - последняя, если это так, то добавляем сами перед этой подстрокой свою "точку".

WBR. Roman

12

Re: CMD/BAT: по сети переименовать файлы

bugagashi, вот Вам примерная болванка для одного файла:

@echo off
setlocal enableextensions enabledelayedexpansion

set sFile=ала.9989ю lit.7.job

call :Replace "%sFile%"
call :Translite "%Replace%"

echo %Translite%

endlocal
exit /b 0

:Replace
    setlocal enableextensions enabledelayedexpansion
    set sFuncName=%~0
    
    set sName=%~n1
    set sValue=%sName:.=_%
    set sValue=%sValue: =_%
    
    endlocal & set %sFuncName:~1%=%sValue%%~x1
    exit /b 0

:Translite
    setlocal enableextensions enabledelayedexpansion
    set sFuncName=%~0
    
    set "sValue=%~1"
    set "sValue=%sValue:а=a%"
    set "sValue=%sValue:б=b%"
    set "sValue=%sValue:в=v%"
    set "sValue=%sValue:г=g%"
    set "sValue=%sValue:д=d%"
    set "sValue=%sValue:е=e%"
    set "sValue=%sValue:ё=jo%"
    set "sValue=%sValue:ж=zh%"
    set "sValue=%sValue:з=z%"
    set "sValue=%sValue:и=i%"
    set "sValue=%sValue:й=j%"
    set "sValue=%sValue:к=k%"
    set "sValue=%sValue:л=l%"
    set "sValue=%sValue:м=m%"
    set "sValue=%sValue:н=n%"
    set "sValue=%sValue:о=o%"
    set "sValue=%sValue:п=p%"
    set "sValue=%sValue:р=r%"
    set "sValue=%sValue:с=s%"
    set "sValue=%sValue:т=t%"
    set "sValue=%sValue:у=u%"
    set "sValue=%sValue:ф=f%"
    set "sValue=%sValue:х=h%"
    set "sValue=%sValue:ц=ts%"
    set "sValue=%sValue:ч=ch%"
    set "sValue=%sValue:ш=sh%"
    set "sValue=%sValue:щ=sch%"
    set "sValue=%sValue:ъ="%"
    set "sValue=%sValue:ы=y%"
    set "sValue=%sValue:ь=`%"
    set "sValue=%sValue:э=e%"
    set "sValue=%sValue:ю=ju%"
    set "sValue=%sValue:я=ja%"
    
    endlocal & set %sFuncName:~1%=%sValue%
    exit /b 0

13 (изменено: bugagashi, 2012-07-17 09:53:41)

Re: CMD/BAT: по сети переименовать файлы

спасибо всем за помощь.
дальше сам.
а может и нет.-)

всё ж таки нет. не сам.
почему так не работает ?

 set sFile="*.job"

хотя

Значением переменной команды set определяет все, что следует за знаком равенства (=). При вводе:

set testVar="test^1"