|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Переименование и копирование файлов |
|
|
CMD/BAT - [решено] Переименование и копирование файлов
|
|
Пользователь Сообщения: 60 |
Добрый день! Хочу создать батник, который бы переименовывал файлы в папке и копировал их в итоговую "Total"
Есть две папки, "1" и "2" и в обеих лежат файлы c именами: check1,check2,check3.... и т.д Нужно чтобы нумерация начиналась с 001 и к имени добавлялся номер папки. например check001_1, check002_1, check003_1 - это для папки "1" и например check001_2, check002_2, check003_2 - для папки "2" файлов может быть более тысячи Для меня это нереально( Пробовал только переименовывать вот таким кодом for /f "tokens=*" %%a in ('dir /b C:\Onkassa\Rename\1\*.*') do ren C:\Onkassa\Rename\1\%%a 001_1%%a в итоге переименован только первый файл 001_1check |
|
|
Отправлено: 11:24, 17-08-2018 |
|
Ветеран Сообщения: 2735
|
Профиль | Отправить PM | Цитировать Iska,
Цитата Iska:
Вот попытка работать без определённого префикса. Но, опять же, приходится телепатить правило образования имени: КусокимениНомерРасширение. (скрипт 2)
@Echo Off
cls
Set "BoxIn=Z:\Box_In"
Set "Folds="1111" "2222""
Set "Mask=*.*"
Set /A Max=1000
Set "BoxOut=Z:\Box_In\Total"
If Not Exist "%BoxOut%" Md "%BoxOut%"
Pushd "%BoxIn%" &&(
FOR %%d IN (%Folds%) DO (
FOR %%f IN ("%%~dpnxd\%Mask%") DO (
Call :RenCopy "%%~d" "%%f" "%%~nf" "%%~xf" "%BoxOut%"
)
)
Popd
)
Pause
GoTo :Eof
:RenCopy
Set /A i=0
Set "NewName=%~3"
:Begin
Set /A i-=1
Call Set "j=%%NewName:~%i%,1%%"
2>nul Set /A j=1%j% || Set /A j=0
If 10 LEQ %j% If %j% LEQ 19 GoTo :Begin
Set /A i+=1
If %i% EQU 0 GoTo :Eof
Call Set "j=%%NewName:~%i%%%"
If /I "%j%"==%1 GoTo :Eof
Set /A j+=%Max%
Call Set "NewName=%%NewName:~0,%i%%%%j:~1%_%~1%~4"
>nul Copy %2 "%~5\%NewName%"
>nul Ren %2 "%NewName%"
GoTo :Eof
Не очень тестировал, подозреваю, этот алгоритм можно обмануть Цитата Iska:
|
||
|
------- Последний раз редактировалось megaloman, 18-08-2018 в 18:55. Отправлено: 22:27, 17-08-2018 | #11 |
|
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
|
|
|
Отправлено: 00:46, 18-08-2018 | #12 |
|
Crazy Сообщения: 1234
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
Цитата megaloman:
![]() И да, данную задачу, можно свести к возможному минимуму ошибок, при стелепатированных условиях: 1. номера файлов присутствуют в конце имени файла или отсутствуют... 2. все цифры в конце имен файлов могут являться только счетчиком, а могут и не являться... 3. остальные цифры в именах и расширениях файлов, являются только текстовой частью. В общем, если не стоит задачи перенумеровать счетчик файлов, а использовать существующую нумерацию: powershell # Можно использовать абсолютный или относительный путь
$src = 'x:\абсолютный_путь\1\*','.\test\2\*' # и т.д.. Здесь астериск, в конце пути, обязателен.
$dst = '.\test\out'
dir $src -file|%{
try{
[int]$n = $_.basename -replace '.*\D(\d+)$','$1'
} catch {
$n = 0
}
$nname = ($_.basename -replace '\d+$') + ('_{0:D3}_' -f $n) + $_.directory.name
ren $_.fullname ($nname + $_.extension)
}
copy $src $dst
|
||
|
------- Последний раз редактировалось YuS_2, 18-08-2018 в 13:24. Причина: корректировка условий и замена move на copy Отправлено: 09:25, 18-08-2018 | #13 |
|
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата YuS_2:
Цитата YuS_2:
Потому — утром |
||
|
Отправлено: 10:33, 18-08-2018 | #14 |
|
Crazy Сообщения: 1234
|
Профиль | Отправить PM | Цитировать Цитата Iska:
На счет частично - это как? Полуцифра? ![]() Цитата Iska:
будут приведены к виду "_XXX_" и если число более трех символов, то обрезано оно не будет... В общем, поэкспериментируйте с кодом, лучше один раз увидеть, всё же... Цитата Iska:
- Можно... но деньги вперед! ![]() |
|||
|
------- Отправлено: 12:46, 18-08-2018 | #15 |
|
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата YuS_2:
Скрытый текст
Начинаем искать постоянную часть имени .Цитата YuS_2:
:Цитата jordan_74:
Цитата YuS_2:
|
||||
|
Отправлено: 13:21, 18-08-2018 | #16 |
|
Crazy Сообщения: 1234
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Цитата Iska:
![]() Цитата Iska:
Цитата jordan_74:
![]() да и после запуска батника, у меня он "не съел" некоторые тестовые файлы... вот и решил "поучаствовать"... ну и собственно, батник гибридный сварганить - разве это сложно? |
||||
|
------- Отправлено: 13:39, 18-08-2018 | #17 |
|
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата YuS_2:
. То есть, я под сим подразумеваю, что есть как имена с цифрами, так и без оных.Цитата YuS_2:
такое
CMD/BAT + javascript: два в одном (Страница 1) — CMD/BAT — Коллекция скриптов и идей — Серый форум
JScript:CMD - вариант с условной компиляцией (Страница 1) — Windows Script Host, HTA (VBScript, JScript) — Общение — Серый форум CMD/BAT + vbscript: два в одном (Страница 1) — Windows Script Host, HTA (VBScript, JScript) — Общение — Серый форум |
||
|
Отправлено: 13:50, 18-08-2018 | #18 |
|
Crazy Сообщения: 1234
|
Профиль | Отправить PM | Цитировать Цитата Iska:
![]() Цитата Iska:
Всё то же самое... по порядку ссылок: - и в чем отличие вызова powershell? ![]() |
||
|
------- Отправлено: 13:59, 18-08-2018 | #19 |
|
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата YuS_2:
а вот это совсем не есть: Цитата YuS_2:
И как я понимаю, поскольку PowerShell исполняет файлы только с определёнными расширениями (так?), фокус провернуть не удастся. |
||
|
Отправлено: 14:07, 18-08-2018 | #20 |
|
|
Участник сейчас на форуме |
|
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
| Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
| CMD/BAT - Переименование папки и копирование новой из сети. | Lorttt | Скриптовые языки администрирования Windows | 19 | 19-06-2017 18:56 | |
| CMD/BAT - Копирование файла и переименование согласно списка из exel | TPOJIb_55 | Скриптовые языки администрирования Windows | 4 | 01-06-2016 09:28 | |
| CMD/BAT - Копирование файлов из подкаталогов и их переименование в название папки | lexxxyatina | Скриптовые языки администрирования Windows | 7 | 13-11-2014 09:44 | |
| CMD/BAT - [решено] Копирование и переименование файла по особой маске | DARK-Silver666 | Скриптовые языки администрирования Windows | 5 | 20-12-2012 21:22 | |
| VBS/WSH/JS - [решено] переименование и копирование папки | Anufriev | Скриптовые языки администрирования Windows | 6 | 22-05-2012 08:11 | |
|