Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] уникальное имя для файла

Ответить
Настройки темы
CMD/BAT - [решено] уникальное имя для файла

Новый участник


Сообщения: 5
Благодарности: 0

Профиль | Отправить PM | Цитировать


Добрый день!
Задача: с помощью БАТ файла копировать файл в указанную категорию и при этом присваивать ему уникальное имя, чтобы избежать повторения имен, а как следствие, затирания одного файла другим.
Предполагаемый вариант решения: присвоить файлу имя состоящее из "текущая дата"-"текущее_время".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

Отправлено: 18:34, 01-09-2011

 

Ветеран


Сообщения: 1754
Благодарности: 965

Профиль | Цитировать


Код: Выделить весь код
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)
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:55, 01-09-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Новый участник


Сообщения: 5
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Вот этот самый res:
https://docs.google.com/viewer?a=v&p...EwN mM3&hl=ru

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

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

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

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

Отправлено: 09:57, 02-09-2011 | #3


Ветеран


Сообщения: 1754
Благодарности: 965

Профиль | Цитировать


Цитата sergserge:
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:,=%"
Цитата sergserge:
2. Чтобы бат-файл запускался в фоновом режиме и не на экране ни на панели задач не отображался. »
Тогда нужна запускалка этого батника. Я для таких целей на ЛИЧНОМ ноутбуке использую hstart:
Код: Выделить весь код
hstart /noconsole "1.cmd"
Если по каким-то соображениям это не вариант, то можно с помощью vbs:
Код: Выделить весь код
Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run("1.cmd"), 0, True
ЗЫ. Я не знаю объем поступающих в обработку файлов, но может быть будет лучше вставить в :loop небольшую паузу? Такой мониторинг, в холостую, должен серьезно грузить проц.

Последний раз редактировалось Foreigner, 02-09-2011 в 19:02.

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:49, 02-09-2011 | #4


Новый участник


Сообщения: 5
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

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

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

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

Отправлено: 11:39, 03-09-2011 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] уникальное имя для файла

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Имя файла для прошивки БИОСа Acer Aspire 5741G Zhandos Поиск драйверов, прошивок и руководств 2 16-06-2011 23:07
CMD/BAT - [решено] Имя файла из строки копируемого файла. Seryoga204 Скриптовые языки администрирования Windows 20 16-03-2011 21:15
Интерфейс - Не обрезать имя файла slfly Microsoft Windows 2000/XP 1 01-11-2009 12:17
CMD/BAT - [решено] Как скопировать имя файла из текстового файла в код батника и т.д. Nun-Nun Скриптовые языки администрирования Windows 6 13-05-2009 13:28
Как получить имя текущего пользователя для использования его в имени файла Denchik Автоматическая установка Windows 2000/XP/2003 1 25-01-2006 22:33




 
Переход