VBS/WSH/JS - Массовое переименование файлов со счётчиком.
-
serg515
VBS/WSH/JS - Массовое переименование файлов со счётчиком.
Есть большое количество текстовых файлов в папке.
Как лучше и быстрее переименовать такое кол-во файлов средствами .vbs
Можно и .bat, но первое вроде бы быстрее работает.
Чтобы новые имена были от 1 и выше,в формате с одной цифрой.(т.е. не 01,или 001, а 1).
Как лучше и быстрее переименовать такое кол-во файлов средствами .vbs
Можно и .bat, но первое вроде бы быстрее работает.
Чтобы новые имена были от 1 и выше,в формате с одной цифрой.(т.е. не 01,или 001, а 1).
-
serg515
Re: VBS/WSH/JS - Массовое переименование файлов со счётчиком.
serg515, вообще, подобные одноразовые вещи быстрее и проще делать полуавтоматически либо сторонними файловыми менеджерами, либо специализированными средствами.
Цитата serg515:
Можно и .bat, но первое вроде бы быстрее работает.
Да нет, в данном случае особой разницы Вы не увидите.
Скрытый текст
[spoiler]Код:
Другое дело, что в именах файлов могут встретиться символы, которые окажутся не по зубам такому пакетному файлу. Посему — да, можно и WSH/PoSH:
Скрытый текст
[spoiler]Код: [/spoiler]
И Вы ничего не сказали, что делать, если там уже[/i] окажутся файлы с такими «нумерованными» именами.
Цитата serg515:
Можно и .bat, но первое вроде бы быстрее работает.
VBS/WSH/JS - Массовое переименование файлов со счётчиком.
Да нет, в данном случае особой разницы Вы не увидите.
Скрытый текст
[spoiler]Код:
[/spoiler]
Код: Выделить всё
@echo off
setlocal enableextensions enabledelayedexpansion
set /a iCount = 0
for /f "usebackq delims=" %%i in (`dir /b /a:-d "*.txt"`) do (
set /a iCount += 1
ren "%%~i" "!iCount!%%~xi"
)
endlocal
exit /b 0Другое дело, что в именах файлов могут встретиться символы, которые окажутся не по зубам такому пакетному файлу. Посему — да, можно и WSH/PoSH:
Скрытый текст
[spoiler]Код: [/spoiler]
Код: Выделить всё
Get-ChildItem -Path '*.txt' | ForEach-Object -Begin {
$iCount = 0
} -Process {
Rename-Item -Path $_.FullName -NewName "$((++$iCount))$($_.Extension)"
}И Вы ничего не сказали, что делать, если там уже[/i] окажутся файлы с такими «нумерованными» именами.
-
serg515
Re: VBS/WSH/JS - Массовое переименование файлов со счётчиком.
Код:
И всё равно, были ли там нумерованные имена или нет, все переименуем заново.
Код: Выделить всё
@Echo Off
Set "BoxIn=Z:\Soft_In"
Set "Mask=*.txt"
For %%i In ("%BoxIn%\%Mask%") Do (Set "Ext=%%~xi" &Ren "%%i" "%%~nxi.~~tmp~~")
Set /A N=0
For %%i In ("%BoxIn%\*%Ext%.~~tmp~~") Do (
Set /A N+=1 &Call Ren "%%i" "%%N%%%Ext%"
)
Exit /BИ всё равно, были ли там нумерованные имена или нет, все переименуем заново.
-
megaloman
Re: VBS/WSH/JS - Массовое переименование файлов со счётчиком.
Цитата Iska:
И Вы ничего не сказали, что делать, если там уже окажутся файлы с такими «нумерованными» именами.
переименовать всё.
И Вы ничего не сказали, что делать, если там уже окажутся файлы с такими «нумерованными» именами.
VBS/WSH/JS - Массовое переименование файлов со счётчиком.
переименовать всё.
-
serg515
Re: VBS/WSH/JS - Массовое переименование файлов со счётчиком.
Цитата megaloman:
@Echo Off
Set "BoxIn=Z:\Soft_In"
Set "Mask=*.txt"
For %%i In ("%BoxIn%\%Mask%") Do (Set "Ext=%%~xi" &Ren "%%i" "%%~nxi.~~tmp~~")
Set /A N=0
For %%i In ("%BoxIn%\*%Ext%.~~tmp~~") Do (
Set /A N+=1 &Call Ren "%%i" "%%N%%%Ext%"
)
Exit /B
работает.по времени похоже на total commander.
может есть аналогичное в vbs ?
@Echo Off
Set "BoxIn=Z:\Soft_In"
Set "Mask=*.txt"
For %%i In ("%BoxIn%\%Mask%") Do (Set "Ext=%%~xi" &Ren "%%i" "%%~nxi.~~tmp~~")
Set /A N=0
For %%i In ("%BoxIn%\*%Ext%.~~tmp~~") Do (
Set /A N+=1 &Call Ren "%%i" "%%N%%%Ext%"
)
Exit /B
VBS/WSH/JS - Массовое переименование файлов со счётчиком.
работает.по времени похоже на total commander.
может есть аналогичное в vbs ?
-
serg515
Re: VBS/WSH/JS - Массовое переименование файлов со счётчиком.
serg515, можно ещё однострочник PS попробовать:
Код:
Код:
Код: Выделить всё
dir *.txt | % {$i=1} {ren $_ -NewName ("{0:D1}.txt" -f $i++)}-
Uragan66
Re: VBS/WSH/JS - Массовое переименование файлов со счётчиком.
Цитата Uragan66:
dir *.txt | % {$i=1} {ren $_ -NewName ("{0:D1}.txt" -f $i++)}
к сожалению если существуют файлы с такими числовыми имена возникает ошибка
dir *.txt | % {$i=1} {ren $_ -NewName ("{0:D1}.txt" -f $i++)}
VBS/WSH/JS - Массовое переименование файлов со счётчиком.
к сожалению если существуют файлы с такими числовыми имена возникает ошибка
-
serg515
Re: VBS/WSH/JS - Массовое переименование файлов со счётчиком.
vbs
[spoiler]Код: [/spoiler]
В ~2раза быстрее моего CMD. Переименовываю все файлы с указанным расширением. Если бы была гарантия, что все исходные файлы если и имеют цифровые имена, но более числа файлов, то переименование можно было бы сделать еще в 2 раза быстрее. В противном случае вижу только такое решение, реализованное в моих CMD и VBS: переименовывать дважды.
[spoiler]Код: [/spoiler]
Код: Выделить всё
MyDir = "Z:\Soft_In"
Ext = "txt"
MyMask = "^.*\." + Ext + "$"
Set Reg = CreateObject("VBScript.RegExp")
Reg.IgnoreCase = True
Reg.Pattern = MyMask
With CreateObject("Scripting.FileSystemObject")
Set Files = .GetFolder(MyDir).Files
For Each File In Files
FilePath = File.Path
If Reg.Test(FilePath) Then
.MoveFile FilePath, FilePath + ".~~~tmp~~~"
End If
Next
Set Files = .GetFolder(MyDir).Files
Reg.Pattern = "^.*\.~~~tmp~~~$"
N = 0
For Each File In Files
FilePath = File.Path
If Reg.Test(FilePath) Then
N = N + 1
.MoveFile FilePath, File.ParentFolder + "\" + CStr(N) + "." + Ext
End If
Next
End With
MsgBox "Done"В ~2раза быстрее моего CMD. Переименовываю все файлы с указанным расширением. Если бы была гарантия, что все исходные файлы если и имеют цифровые имена, но более числа файлов, то переименование можно было бы сделать еще в 2 раза быстрее. В противном случае вижу только такое решение, реализованное в моих CMD и VBS: переименовывать дважды.
-
megaloman
Re: VBS/WSH/JS - Массовое переименование файлов со счётчиком.
Цитата megaloman:
…переименовывать дважды.
Ну, можно ещё сначала переместить во временный каталог, а затем перемещать по одному в другой временный каталог, там переименовывать в очередное имя, а затем перемещать вобрат в исходное местоположение, и в конце удалять оба уже пустых временных каталога — это гарантирует отсутствие проблем с наложением имён даже без проверки. Но тут надо смотреть — не потеряются ли разрешения безопасности на файлы.
…переименовывать дважды.
VBS/WSH/JS - Массовое переименование файлов со счётчиком.
Ну, можно ещё сначала переместить во временный каталог, а затем перемещать по одному в другой временный каталог, там переименовывать в очередное имя, а затем перемещать вобрат в исходное местоположение, и в конце удалять оба уже пустых временных каталога — это гарантирует отсутствие проблем с наложением имён даже без проверки. Но тут надо смотреть — не потеряются ли разрешения безопасности на файлы.
-
Iska
Re: VBS/WSH/JS - Массовое переименование файлов со счётчиком.
Цитата Iska:
оба уже пустых временных каталога
ИМХО, слишком много временных каталогов, хватает одного.
Код:
Я раньше тоже предполагал такой вариант, решил, что он будкт медленнее, но по времени одно и то же.
Кстати, в vbs пришлось делать именно Move, переименовать файл я не умею.
оба уже пустых временных каталога
VBS/WSH/JS - Массовое переименование файлов со счётчиком.
ИМХО, слишком много временных каталогов, хватает одного.
Код:
Код: Выделить всё
@Echo Off
Set "BoxIn=Z:\Soft_In"
Set "Mask=*.txt"
Set "MyTMP=%BoxIn%\%~nx0.tmp"
2>nul Rd /Q /S "%MyTMP%"
Md "%MyTMP%"
Set /A N=0
For %%i In ("%BoxIn%\%Mask%") Do (Set /A N+=1 &>nul Call Move "%%i" "%MyTMP%\%%N%%%%~xi")
>nul Move "%MyTMP%\*.*" "%BoxIn%\"
Rd /Q /S "%MyTMP%"
Exit /BЯ раньше тоже предполагал такой вариант, решил, что он будкт медленнее, но по времени одно и то же.
Кстати, в vbs пришлось делать именно Move, переименовать файл я не умею.