Войти

Показать полную графическую версию : [решено] уникальное имя для файла


sergserge
01-09-2011, 18:34
Добрый день!
Задача: с помощью БАТ файла копировать файл в указанную категорию и при этом присваивать ему уникальное имя, чтобы избежать повторения имен, а как следствие, затирания одного файла другим.
Предполагаемый вариант решения: присвоить файлу имя состоящее из "текущая дата"-"текущее_время".jpg
Желательно, чтобы время было указано с долями секунд, чтобы даже если за секунду копируется 2 файл, чтобы один не испортил другой
Возможно есть и другие варианты решения, но я их не знаю. Помогите, пожалуйста.

move C:\fest\1\*.jpg C:\fest\big\???.jpg

Вот файл целиком:

echo off
:loop
rem постояннос следит за появлением файлов в дериктории
:test
if exist C:\fest\*.jpg goto go
goto test
:go
rem папка 1 нужна для того, чтобы программа не пропускала файлы
move C:\fest\*.jpg C:\fest\1
rem изменяет размер файла, в конце строки стоит адрес конечного файла а после него - начального
res -resize 180 135 -rotate 90 -sharpen 20 -out jpeg -o C:\fest\small\%%.jpg C:\fest\1\*.jpg
rem переносим начальный файл в другую дерикторию, чтобы предотвратить его повторную обработку
move C:\fest\1\*.jpg C:\fest\big\%date%.jpg
goto loop

Foreigner
01-09-2011, 18:55
echo off
setlocal

:loop

for %%i in (c:\fest\*.jpg) do (

res -resize 180 135 -rotate 90 -sharpen 20 -out jpeg -o C:\fest\small\%%.jpg "%%i"
call:move "%%i"

)
goto:loop

:move
set "name=%date:.=%-%time::=%%~x1"
move %1 "c:\fest\big\%name:,=%"

выход из батника Ctrl+C или крестик

PS. Не тестировал
ЗЫЫ. Что за res? Синтаксис как у nconvert (Xnview)

sergserge
02-09-2011, 09:57
Спасибо большое! Работает! Вы мне здорово помогли. Я и не думал, что всё так замечательно получится. И код весь переписали гораздо лучше чем у меня было. Правда, я в нем теперь половину команд не понимаю :)

Вот этот самый res:
https://docs.google.com/viewer?a=v&pid=explorer&chrome=true&srcid=0B6KoXc17b4C9M2ZjNjEzN2YtY2FhOC00ZWVlLTgwMGYtZjlmNGUwOWEwNmM3&hl=ru

А можно сделать:

1. чтобы файлы C:\fest\small\%%.jpg сразу же получали такое же имя как и "c:\fest\big\%name:,=%" . Так, чтобы имя большого файла и маленького совпадало. Я пытался как-то переделать сам, но у меня ничего не получилось.

2. Чтобы бат-файл запускался в фоновом режиме и не на экране ни на панели задач не отображался. Тогда я смогу просто в автозагрузку его закинуть и пользователю даже не нужно будет о нем беспокоиться.

Ещё раз, спасибо Вам большое!

Foreigner
02-09-2011, 18:49
1. чтобы файлы C:\fest\small\%%.jpg сразу же получали такое же имя как и "c:\fest\big\%name:,=%" »

echo off
setlocal

:loop

for %%i in (c:\fest\*.jpg) do call:move "%%i"
goto:loop

:move
set "name=%date:.=%-%time::=%%~x1"
res -resize 180 135 -rotate 90 -sharpen 20 -out jpeg -o "C:\fest\small\%name:,=%" %1
move %1 "c:\fest\big\%name:,=%"

2. Чтобы бат-файл запускался в фоновом режиме и не на экране ни на панели задач не отображался. »
Тогда нужна запускалка этого батника. Я для таких целей на ЛИЧНОМ ноутбуке использую hstart (http://www.ntwind.com/software/hstart.html):

hstart /noconsole "1.cmd"

Если по каким-то соображениям это не вариант, то можно с помощью vbs:

Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run("1.cmd"), 0, True


ЗЫ. Я не знаю объем поступающих в обработку файлов, но может быть будет лучше вставить в :loop небольшую паузу? Такой мониторинг, в холостую, должен серьезно грузить проц.

sergserge
03-09-2011, 11:39
"ЗЫ. Я не знаю объем поступающих в обработку файлов, но может быть будет лучше вставить в :loop небольшую паузу? Такой мониторинг, в холостую, должен серьезно грузить проц."

Спасибо! Действительно, процессор был постоянно загружен на 100%.
Поискал в интернете, нашел такое решение:
есть некая программка sleep, говорят, она стандартная, скопировал её в папку Виндовз, а в скрипте написал вот так:

:loop
sleep 1
for %%i in (c:\fest\*.jpg) do call:move "%%i"
goto:loop

В общем, с вашей помощью все задачи, которые стояли передо мной выполнены. Ещё раз спасибо, всё работает замечательно. Прямо желание появилось какие-то программы писать. Только жалко, что больше ничего не нужно. Может заняться разработкой какого-нибудь вируса? :)




© OSzone.net 2001-2012