CMD/BAT - [решено] Переименование и копирование файлов

Ответить
Аватара пользователя
jordan_74

Re: CMD/BAT - [решено] Переименование и копирование файлов

Сообщение jordan_74 »

Iska,
Цитата Iska:



по условию задачи ничего не сказано про постоянный префикс
CMD/BAT - [решено] Переименование и копирование файлов




Если задача плохо формализована клиентом, приходится телепатить.


Вот попытка работать без определённого префикса. Но, опять же, приходится телепатить правило образования имени: КусокимениНомерРасширение. (скрипт 2)

[spoiler]Код:
[/spoiler]

Код: Выделить всё

@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:



пытаться выцепить значимую часть имени из произвольно взятых
CMD/BAT - [решено] Переименование и копирование файлов




невозможно любым средством. Сначала придётся определить, что такое значимая часть.
Аватара пользователя
Iska

Re: CMD/BAT - [решено] Переименование и копирование файлов

Сообщение Iska »

Цитата megaloman:



невозможно любым средством. Сначала придётся определить, что такое значимая часть.
CMD/BAT - [решено] Переименование и копирование файлов




Браво! Теперь Вы меня поняли.
Аватара пользователя
jordan_74

Re: CMD/BAT - [решено] Переименование и копирование файлов

Сообщение jordan_74 »

Цитата megaloman:



Если задача плохо формализована клиентом, приходится телепатить.
CMD/BAT - [решено] Переименование и копирование файлов





Цитата megaloman:



невозможно любым средством. Сначала придётся определить, что такое значимая часть.
CMD/BAT - [решено] Переименование и копирование файлов




Вот! И это естественно, т.к. любой алгоритм составить невозможно, если отсутствуют условия для его составления...

И да, данную задачу, можно свести к возможному минимуму ошибок, при стелепатированных условиях:

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
Аватара пользователя
jordan_74

Re: CMD/BAT - [решено] Переименование и копирование файлов

Сообщение jordan_74 »

Цитата YuS_2:



1. номера файлов присутствуют в конце имени файла
CMD/BAT - [решено] Переименование и копирование файлов




Или не присутствуют. Или присутствуют частично.




Цитата YuS_2:



2. все цифры в конце имен файлов могут являться только счетчиком.
CMD/BAT - [решено] Переименование и копирование файлов




Или могут не являться счётчиком. И т.д., и т.п.



Потому — утром деньги чётко оговоренное и вменяемое ТЗ, вечером — стулья код. И никак иначе.
Аватара пользователя
Iska

Re: CMD/BAT - [решено] Переименование и копирование файлов

Сообщение Iska »

Цитата Iska:



Или не присутствуют. Или присутствуют частично.
CMD/BAT - [решено] Переименование и копирование файлов




Если не присутствуют, присваиваем номер 0, ничего необычного...

На счет частично - это как? Полуцифра? Изображение




Цитата Iska:



Или могут не являться счётчиком
CMD/BAT - [решено] Переименование и копирование файлов




могут, вполне, это учтено, но этим кодом:



Код:

Код: Выделить всё

'_{0:D3}_' -f $n

будут приведены к виду "_XXX_" и если число более трех символов, то обрезано оно не будет...



В общем, поэкспериментируйте с кодом, лучше один раз увидеть, всё же...




Цитата Iska:



утром деньги..., вечером — стулья
CMD/BAT - [решено] Переименование и копирование файлов




- А можно наоборот?

- Можно... но деньги вперед!

Изображение
Аватара пользователя
YuS_2

Re: CMD/BAT - [решено] Переименование и копирование файлов

Сообщение YuS_2 »

Цитата YuS_2:



На счет частично - это как? Полуцифра?
CMD/BAT - [решено] Переименование и копирование файлов




В одном имени — есть, в другом имени — нет. Первым идёт (отдаётся по FindFirstFileEx()) имя без цифр (на NTFS) или какое было первым создано (на FAT'ах). И да — на PowerShell точно так же:



Скрытый текст

[spoiler]Изображение[/spoiler]




Начинаем искать постоянную часть имени Изображение.




Цитата YuS_2:



могут, вполне, это учтено, но этим кодом:



Код:

Код: Выделить всё

'_{0:D3}_' -f $n

будут приведены к виду "_XXX_" и если число более трех символов, то обрезано оно не будет...

В общем, поэкспериментируйте с кодом, лучше один раз увидеть, всё же...
CMD/BAT - [решено] Переименование и копирование файлов




Ох… В общем, почитайте тему, что ли. Лучше, действительно, один раз увидеть Изображение:


Цитата jordan_74:




Цитата Iska:




Цитата jordan_74:



Хочу создать батник,
CMD/BAT - [решено] Переименование и копирование файлов




PowerShell Вас устроит?
CMD/BAT - [решено] Переименование и копирование файлов




Желательно батник конечно
CMD/BAT - [решено] Переименование и копирование файлов




Кто бы сомневался, что на PowerShell регулярками:


Цитата YuS_2:





Код:

Код: Выделить всё

… -replace '.*\D(\d+)$','$1'
…
… -replace '\d+$') …

CMD/BAT - [решено] Переименование и копирование файлов




это решается на ать-два.
Аватара пользователя
Iska

Re: CMD/BAT - [решено] Переименование и копирование файлов

Сообщение Iska »

Цитата Iska:



В одном имени — есть, в другом имени — нет.
CMD/BAT - [решено] Переименование и копирование файлов




Это понятно. Непонятно это:


Цитата Iska:



присутствуют частично.
CMD/BAT - [решено] Переименование и копирование файлов




имхо, цифры либо есть, либо их нет... а то какая-то половинчатая беременность получается Изображение




Цитата Iska:



почитайте тему, что ли
CMD/BAT - [решено] Переименование и копирование файлов




да читал я, читал... и это:


Цитата jordan_74:



Желательно батник конечно
CMD/BAT - [решено] Переименование и копирование файлов




тоже видел... но "желательно" - не значит "только" Изображение

да и после запуска батника, у меня он "не съел" некоторые тестовые файлы... вот и решил "поучаствовать"...

ну и собственно, батник гибридный сварганить - разве это сложно?
Аватара пользователя
YuS_2

Re: CMD/BAT - [решено] Переименование и копирование файлов

Сообщение YuS_2 »

Цитата YuS_2:



имхо, цифры либо есть, либо их нет... а то какая-то половинчатая беременность получается
CMD/BAT - [решено] Переименование и копирование файлов




Поменяйте «либо есть, либо нет» на «где-то есть, где-то нет» — вот и будет «частично» Изображение. То есть, я под сим подразумеваю, что есть как имена с цифрами, так и без оных.




Цитата YuS_2:



ну и собственно, батник гибридный сварганить - разве это сложно?
CMD/BAT - [решено] Переименование и копирование файлов




Не-не-не. Прямой вызов powershell.exe — это не «гибридный». Гибридный — это, например:



такое

[spoiler]
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) — Общение — Серый форум
[/spoiler]
Аватара пользователя
Iska

Re: CMD/BAT - [решено] Переименование и копирование файлов

Сообщение Iska »

Цитата Iska:



То есть, я под сим подразумеваю, что есть как имена с цифрами, так и без оных.
CMD/BAT - [решено] Переименование и копирование файлов




Теперь понятнее, что имелось в виду, но это всё те же два состояния (либо есть, либо нет) и они учтены... я-то думал, что появилось ещё какое-то неопределенное состояние наличия цифр... Изображение




Цитата Iska:



Не-не-не. Прямой вызов powershell.exe — это не «гибридный». Гибридный — это, например:
CMD/BAT - [решено] Переименование и копирование файлов




И в чем отличие?

Всё то же самое... по порядку ссылок:



Код:

Код: Выделить всё

cscript //nologo //e:javascript
CScript /nologo /e:jscript
cscript /nologo /e:vbscript

- и в чем отличие вызова powershell? Изображение
Аватара пользователя
YuS_2

Re: CMD/BAT - [решено] Переименование и копирование файлов

Сообщение YuS_2 »

Цитата YuS_2:



- и в чем отличие вызова powershell?
CMD/BAT - [решено] Переименование и копирование файлов




В том, что вызов гибридного должен выглядеть так же. То есть, наподобие:



Код:

Код: Выделить всё

powershell.exe -File "%~0"

а вот
CMD/BAT - Поиск самого свежего файла
совсем не есть:


Цитата YuS_2:



оно и написано в виде гибрида, т.е. для cmd
CMD/BAT - Поиск самого свежего файла




Код не передаётся в командной строке интерпретатора команд PowerShell, а содержится в самом файле, том же файле.



И как я понимаю, поскольку PowerShell исполняет файлы только с определёнными расширениями (так?), фокус провернуть не удастся.
Ответить

Вернуться в «Скриптовые языки администрирования Windows»