Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Дубликат папки/файла (http://forum.oszone.net/showthread.php?t=299660)

alpap 12-05-2015 16:32 2506448

Дубликат папки/файла
 
Как правильно создать батник который создает папку или файл, проверяет есть ли она/он перед этим и если есть добавляет к имени 1, есть 1, то 2 и т.д.
точно также как в контекстном меню создать ПКМ на папке/файле. "Новая папка", при наличии - "Новая папка1"... Как-то в for надо указать бесконечность ...(1,1,?)
а может вообще по-другому.
Да и подскажите как свое сообщение перенести из темы в тему.
Спасибо заранее!

Iska 12-05-2015 19:44 2506512

На WSH я, помнится, делал такое здесь по аналогичной просьбе. Только не:
Цитата:

Цитата alpap
точно также как в контекстном меню создать ПКМ на папке/файле. "Новая папка", при наличии - "Новая папка1" »

А «Новая папка», «Новая папка (2)», «Новая папка (3)» и т.д. — вот так и будет именно «точно», а не как Вы написали.

Цитата:

Цитата alpap
Да и подскажите как свое сообщение перенести из темы в тему. »

Никак, если Вы не модератор/администратор. Над сообщением есть перечень ссылок «Профиль | Отправить PM | Цитировать | Сообщить модератору». Щёлкните над своим сообщением ссылку «Сообщить модератору» и мотивированно изложите свою просьбу.

alpap 12-05-2015 19:50 2506519

Iska,
Меня устроит на vbs (а что такое WSH, есть в windows 7 x86?), если где-то завалялось и можно найти то буду премного благодарен.
P.S. А эта форма или вариант - вполне устраивает.

alpap 12-05-2015 21:55 2506583

Я тут подумал... Впринципе я сделал батник для создания папки с именем дата,время, тогда будет создаваться новая папка всякий раз,
что устраивает отностельно (хотелось бы все же свое имя вместо новая папка), а как эту созданную папку запустить открытой. Через
start я думаю получится, но что запускать если папка еще не создана?

iccup.platoon@vk 12-05-2015 22:27 2506592

Покажите код.

alpap 12-05-2015 22:44 2506603

Я так понял для создания папки дата, время

set sFolderName=%date% %time:~0,-3%
md "%sFolderName::=-%"

iccup.platoon@vk 12-05-2015 23:02 2506609

Код:

@echo off
set fldr=%date% %time:~0,-3%
set fldrPath=%fldr::=-%
mkdir "C:\%fldrPath%"
start "" "C:\%fldrPath%"

Работает.

alpap 12-05-2015 23:08 2506614

Пропускает и ставит тире во времени - уже опробовано.

iccup.platoon@vk 12-05-2015 23:09 2506616

фиксанул

Господи. Дико извиняюсь:
Код:

@echo off
set fldr=%date% %time:~0,-3%
set fldrPath=%fldr::=-%
mkdir "%fldrPath%"
start "" "%fldrPath%"

Не всё после собственного теста стёр.

Iska 12-05-2015 23:58 2506636

Цитата:

Цитата alpap
а что такое WSH, есть в windows 7 x86? »

WSH — Windows Script Host. VBScript является одним из языков, которые может использовать WSH. В Windows 7 он, разумеется, наличествует.

Цитата:

Цитата alpap
Меня устроит на vbs …, если где-то завалялось и можно найти то буду премного благодарен. »

Будете смеяться — не найду никак. Надо будет заново написать. Либо там была не «Новая папка», а как-то иначе шаблон звался.

alpap 13-05-2015 01:08 2506675

iccup.platoon@vk,
Да так работает - спасибо! Я использую стороннюю программу для редактирования контекстного меню поэтому у меня код следующий

@echo off
cd /d "%~dp2"
set fldr= %date% %time:~0,-3%
set fldrPath=%fldr::=. %
mkdir "%fldrPath%"
start "" "%fldrPath%"
exit

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

iccup.platoon@vk 13-05-2015 03:12 2506684

Покажите на примере список предполагаемых названий папок.

alpap 13-05-2015 12:27 2506833

iccup.platoon@vk,
Да, в принципе, нет разницы (особой) как они называются - хотя, в идеале надо чтобы я сам мог задавать им название.
Главное чтобы содав папку шла проверка что папка с таким именем существует и следующая папка создавалась с тем же именем,
но с цифрой 1(2), 2(3),... т.е. по шаблону <имя папки> <номер>, <имя папки> <номер+1>, ... .

iccup.platoon@vk 13-05-2015 12:59 2506854

Код:

@echo off
mkdir %cd%\dirtest
cls
set dirname=Papka
echo Enter the number of folders to create
set /p dirnumber=
for /L %%i in (1,1,%dirnumber%) do (
        mkdir "%cd%\dirtest\%dirname%%%i"
)

Спросит сколько папок создать, требует введения числа =) Переменная dirname хранит в себе шаблон имени, к которому будет подставлен номер. Я помню о необходимости проверки существования папки, если вы опишите - что должно происходить при существовании или не существовании папок, я предоставлю вам весь батник.

alpap 13-05-2015 13:36 2506874

iccup.platoon@vk,
Да все банально должно происходить, нет такой (первой ("нулевой")) папки - создаем первую ("нулевую") и радуемся, хотим coздать еще одну - создается ее типа копия (в смысле имени) с уже номером+1 и т.д. Создается по команде только одна папка и при этом никто и нигде не должен матюкаться, что папка с таким именем уже существует. Я изначально хотел сделать <имя папки> <дата,время>, ну не хотел, а как вариант - но, во-первых длинное название получается часто, этого даты с именем я уже не вижу папки на одно лицо, во-вторых у меня и так достаточно будет дат и времен - ни к чему, номер - идеал. Я не буду (не планирую) вводить номер(а) папки, только задам ей свое имя.

iccup.platoon@vk 13-05-2015 16:16 2506946

я однозначно повержен =)

alpap 14-05-2015 00:47 2507096

Georgio,
Вот это дааа! Нет, я бы такое и близко не сделал - превзошло все ожидания. Спасибо огромное, все работает супер - проверил. Немного лишнее для меня - опрос имени папки, но это даже интереснее, тем более лучше больше чем меньше да и есть чему поучиться еще где-нибудь применю.

alpap 14-05-2015 18:24 2507313

Georgio,
Да мне Ваш вариант даже больше понравился, окно только меньше сделал - для красоты, надеюсь правильно (работает).

mode con cols=30 lines=1
@echo off
cd /d "%~dp2"
set/p name=Введите имя папки:
echo %name%
if defined name (
for /f "delims=" %%i in ('
2^>nul dir/ad/b "%name%*"^| findstr/irc:"^%name%[1-9][0-9]*$"
') do (
set x=%%i
for /f %%j in ('
cmd/v/c echo "!x:*%name%=!"
') do (
for /f %%k in ('
set/a max
') do (
if %%~j gtr %%k (
set/a max=%%~j+1
)
)
)
)
) else (
exit/b 1
)
if defined max (
for /l %%i in (1 1 %max%) do (
for /f %%j in ('
set/a %%i+1
') do (
2>nul md "%name%%%j"&& (
exit/b 0
)
)
)
) else (
2>nul md "%name%"|| (
md "%name%1"
)
exit/b 0
)

alpap 14-05-2015 19:12 2507332

Georgio,
Про параметр "%1" не понял, а cd /d "%~dp2" я использую потому что у меня стоит сторонняя программа для редактирования контекстного меню и таким образом перехожу в нужную мне для работы директорию. А за кавычки - спасибо.


Время: 06:13.

Время: 06:13.
© OSzone.net 2001-