|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Переименование и копирование файлов |
|
CMD/BAT - [решено] Переименование и копирование файлов
|
Пользователь Сообщения: 60 |
Профиль | Отправить PM | Цитировать Добрый день! Хочу создать батник, который бы переименовывал файлы в папке и копировал их в итоговую "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 |
Пользователь Сообщения: 60
|
Профиль | Отправить PM | Цитировать Цитата YuS_2:
Цитата YuS_2:
Цитата YuS_2:
Новый архив в процессе переименования не появится |
|||
Отправлено: 12:41, 22-08-2018 | #61 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Crazy Сообщения: 1171
|
Профиль | Отправить PM | Цитировать Цитата jordan_74:
powershell script.ps1 $src = '.\test' # корневой каталог с путем (относительным или абсолютным) $src_sub = 'A','B' # и т.д., имена проверяемых каталогов $dst = '.\test\total' #целевой каталог с путем (относительным или абсолютным) $per = '407028' # постоянная составляющая номера счета. используется для разделения имени файла function rename-file ($a,$b) { dir $a -file|%{ $nname = $_.basename + ('{0:D3}' -f $k) + '_' + $b + '_' + $_.directory.parent.name ren $_.fullname ($nname + $_.extension) $k++ } move "$a\*" $a.parent.fullname del $a } function expand-rename { begin {$k=0} process { $d = $_.directory.fullname + '\' + $_.basename if (!(test-path $d)){md $d|out-null} expand-archive $_.fullname ($fld = gi $d) $acn = ($_.basename -split $per)[1].split() rename-file $fld ($acn[0] + '_' + $acn[2]) del $_.fullname } } $arr = dir $src -dir $arr|%{if($src_sub -match $_.name){dir ($_.fullname+'\*') -file -inc '*.zip'}}|expand-rename $arr|%{if($src_sub -match $_.name){ dir ($_.fullname+'\*') -file|sort -prop lastwritetime|%{$i=1}{ $ename = (($tmp = $_.basename -split '(_)')[0] -replace '(?<=\D)\d+$') + ` ('{0:D3}' -f $i) + (-join $tmp[1..$tmp.count]) ren $_.fullname ($ename + $_.extension) $i++ if ($i -ge 999){ write-warning "достигнут лимит количества файлов, проверьте исходные данные"; break } } } } $arr|%{if($src_sub -match $_.name){move ($_.fullname+'\*') $dst}} 1. Входные данные: архивы с чеками с форматом имени "Расчетный счет 40702810816540044924 от 17082018" 2. Архивы после обработки удаляются 3. Пересчитываются все распакованные файлы по дате изменения, в пределах исходного каталога, т.е. отдельная нумерация в каталоге "A" (от 001 до 999) и отдельная в "B" (от 001 до 999). 4. Файлы, распакованные из архивов, после переименования перемещаются в целевой каталог. Цитата jordan_74:
Ну, а т.к. целевая папка чистится только вручную, то будем считать, что исходные каталоги чистые и в них ничего нет. Туда необходимо только добавить архивы и запустить скрипт. |
||
------- Последний раз редактировалось YuS_2, 22-08-2018 в 13:17. Отправлено: 13:04, 22-08-2018 | #62 |
Ветеран Сообщения: 2710
|
Профиль | Отправить PM | Цитировать Вот решение с включением информации о счетах в именах файлов
@Echo Off cls Set "BoxIn=Z:\Box_In" Set "Folds="A" "B"" Set "Pref=check" Set /A Max=1000 Set "BoxOut=Z:\Box_In\Total" Set "OutTmp=Z:\Box_In\Total\Tmp" Set "Arc="C:\Program Files\7-Zip\7z.exe" e -o"%OutTmp%"" Set "ArcMask=*.7Z" If Not Exist "%BoxOut%" Md "%BoxOut%" If Not Exist "%OutTmp%" Md "%OutTmp%" Set /A Max1=%Max%-1 FOR %%d IN (%Folds%) Do ( If Not Exist "%BoxOut%\%%~d" Md "%BoxOut%\%%~d" FOR %%f IN ("%BoxIn%\%%~d\%ArcMask%") Do Call :ArcOut "%%~d" "%%~f" "%BoxOut%\%%~d" ) Pause GoTo :Eof rem Формат архива "Расчетный счет 40702810816540044924 от 16082018.7Z" Важна длина хвоста имени :ArcOut Set "NN=%~n2" Set "NN=%NN:~-26% Set "NN=%Pref%_%NN:~22,4%%NN:~20,2%%NN:~18,2%_%~1_%NN:~0,14%_" Echo "%2" %Arc% "%~2" >nul FOR /L %%n IN (1,1,%Max1%) Do ( Set /A MMax=%Max%+%%n FOR %%f IN ("%OutTmp%\%Pref%%%n.*") Do ( Call Move /Y "%%f" "%BoxOut%\%NN%%%MMax:~1%%%%~xf" >nul ) ) Move /Y "%~2" "%~3\" >nul Del /Q "%OutTmp%\*.*" 2>nul GoTo :Eof Вот, для примера, мои файлы:
Z:\Box_In\A\Расчетный счет 40702810816540044921 от 16082018.7z Z:\Box_In\A\Расчетный счет 40702810816540044922 от 16082018.7z Z:\Box_In\A\Расчетный счет 40702810816540044923 от 16082018.7z Z:\Box_In\B\Расчетный счет 40702810816540044924 от 16082018.7z Z:\Box_In\B\Расчетный счет 40702810816540044925 от 16082018.7z Z:\Box_In\B\Расчетный счет 40702810816540044926 от 16082018.7z Архивы по очереди распаковываются в промежуточную папку , у меня Z:\Box_In\Total\Tmp, Ваши файлы с именами check1,2,3... с расширениями, распакованное перемещается в папку Z:\Box_In\Total с сформированными именами. Вот мои выходные файлы для примера
Z:\Box_In\Total\check_20180816_A_10816540044921_001
Z:\Box_In\Total\check_20180816_A_10816540044921_002 Z:\Box_In\Total\check_20180816_A_10816540044921_003 Z:\Box_In\Total\check_20180816_A_10816540044921_004 Z:\Box_In\Total\check_20180816_A_10816540044921_005 Z:\Box_In\Total\check_20180816_A_10816540044921_006 Z:\Box_In\Total\check_20180816_A_10816540044921_007 Z:\Box_In\Total\check_20180816_A_10816540044921_008 Z:\Box_In\Total\check_20180816_A_10816540044921_009 Z:\Box_In\Total\check_20180816_A_10816540044921_010 Z:\Box_In\Total\check_20180816_A_10816540044922_001 Z:\Box_In\Total\check_20180816_A_10816540044922_002 Z:\Box_In\Total\check_20180816_A_10816540044922_003 Z:\Box_In\Total\check_20180816_A_10816540044922_004 Z:\Box_In\Total\check_20180816_A_10816540044922_005 Z:\Box_In\Total\check_20180816_A_10816540044922_006 Z:\Box_In\Total\check_20180816_A_10816540044922_007 Z:\Box_In\Total\check_20180816_A_10816540044922_008 Z:\Box_In\Total\check_20180816_A_10816540044922_009 Z:\Box_In\Total\check_20180816_A_10816540044922_010 Z:\Box_In\Total\check_20180816_A_10816540044923_001 Z:\Box_In\Total\check_20180816_A_10816540044923_002 Z:\Box_In\Total\check_20180816_A_10816540044923_003 Z:\Box_In\Total\check_20180816_A_10816540044923_004 Z:\Box_In\Total\check_20180816_A_10816540044923_005 Z:\Box_In\Total\check_20180816_A_10816540044923_006 Z:\Box_In\Total\check_20180816_A_10816540044923_007 Z:\Box_In\Total\check_20180816_A_10816540044923_008 Z:\Box_In\Total\check_20180816_A_10816540044923_009 Z:\Box_In\Total\check_20180816_A_10816540044923_010 Z:\Box_In\Total\check_20180816_B_10816540044924_001.txt Z:\Box_In\Total\check_20180816_B_10816540044924_002.txt Z:\Box_In\Total\check_20180816_B_10816540044924_003.txt Z:\Box_In\Total\check_20180816_B_10816540044924_004.txt Z:\Box_In\Total\check_20180816_B_10816540044924_005.txt Z:\Box_In\Total\check_20180816_B_10816540044924_006.txt Z:\Box_In\Total\check_20180816_B_10816540044924_007.txt Z:\Box_In\Total\check_20180816_B_10816540044924_008.txt Z:\Box_In\Total\check_20180816_B_10816540044924_009.txt Z:\Box_In\Total\check_20180816_B_10816540044924_010.txt Z:\Box_In\Total\check_20180816_B_10816540044925_001.txt Z:\Box_In\Total\check_20180816_B_10816540044925_002.txt Z:\Box_In\Total\check_20180816_B_10816540044925_003.txt Z:\Box_In\Total\check_20180816_B_10816540044925_004.txt Z:\Box_In\Total\check_20180816_B_10816540044925_005.txt Z:\Box_In\Total\check_20180816_B_10816540044925_006.txt Z:\Box_In\Total\check_20180816_B_10816540044925_007.txt Z:\Box_In\Total\check_20180816_B_10816540044925_008.txt Z:\Box_In\Total\check_20180816_B_10816540044925_009.txt Z:\Box_In\Total\check_20180816_B_10816540044925_010.txt Z:\Box_In\Total\check_20180816_B_10816540044926_001.txt Z:\Box_In\Total\check_20180816_B_10816540044926_002.txt Z:\Box_In\Total\check_20180816_B_10816540044926_003.txt Z:\Box_In\Total\check_20180816_B_10816540044926_004.txt Z:\Box_In\Total\check_20180816_B_10816540044926_005.txt Z:\Box_In\Total\check_20180816_B_10816540044926_006.txt Z:\Box_In\Total\check_20180816_B_10816540044926_007.txt Z:\Box_In\Total\check_20180816_B_10816540044926_008.txt Z:\Box_In\Total\check_20180816_B_10816540044926_009.txt Z:\Box_In\Total\check_20180816_B_10816540044926_010.txt После обработки архивы перемещаются в соответствуюжие папки, у меня Z:\Box_In\Total\A Z:\Box_In\Total\B Z:\Box_In\Total\Tmp очищается, хотя, в принципе, там и без этого ничего не должно было оставаться, если только в Ваших архивах было что-то еще, кроме файлов Check Как я понимаю, при таком подходе файлов типа check123_1 быть не может, ранее они появлялись из-за того, что в разных архивах имелись разные файлы с одинаковым названием. |
------- Последний раз редактировалось megaloman, 22-08-2018 в 17:31. Отправлено: 17:25, 22-08-2018 | #63 |
Crazy Сообщения: 1171
|
Профиль | Отправить PM | Цитировать |
------- Отправлено: 17:56, 22-08-2018 | #64 |
Ветеран Сообщения: 2710
|
Профиль | Отправить PM | Цитировать YuS_2, ом мани падме хум! Не увидел зип. Но это не принципиально. Легко изменяется. Но у меня нет зипа, отладить не на чем
|
------- Отправлено: 19:54, 22-08-2018 | #65 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
|
|
Отправлено: 20:02, 22-08-2018 | #66 |
Ветеран Сообщения: 2710
|
Профиль | Отправить PM | Цитировать Iska, да создать зип можно,. Но загвоздка в том, чтобы распаковать архиватором zip - там будут свои ключи. Я с 7z убодался. Насколько всё-таки rar удобнее.
|
------- Отправлено: 20:24, 22-08-2018 | #67 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать |
Отправлено: 20:48, 22-08-2018 | #68 |
Crazy Сообщения: 1171
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
|
|
------- Отправлено: 21:19, 22-08-2018 | #69 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать |
Отправлено: 21:43, 22-08-2018 | #70 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|