Создать папку формата "yyyy-mm-dd" и войти в неё
Select messages from
# through # FAQ
[/[Print]\]

Total Commander -> Автоматизация Total Commander

#1: Создать папку формата "yyyy-mm-dd" и войти в неё Author: Cortina PostPosted: Sun Sep 28, 2014 19:23
    —
Здравствуйте!
Есть скрипт Create_folder_date.vbs
Создать папку формата "dd-mm-yyyy" и войти в неё
Code:
mydate = Right("0" & Day(date), 2) & "-" & Right("0" & Month(date), 2) & "-" & Year(date)
WScript.CreateObject("WScript.Shell").SendKeys "{F7}" & mydate & "{Enter}" & "{Enter}"

Подскажите, пожалуйста, как сделать дату не dd-mm-yyyy, а yyyy-mm-dd?
Методом высоконаучного тыка ничего поменять не смогла. Скрипт взят, по-моему отсюда, но поиском не нашла. Спасибо!

#2:  Author: Tol!kLocation: Арзамас PostPosted: Sun Sep 28, 2014 19:49
    —
Code:
' mydate = Right("0" & Day(date), 2) & "-" & Right("0" & Month(date), 2) & "-" & Year(date)
mydate = Year(date) & "-" & Right("0" & Month(date), 2) & "-" & Right("0" & Day(date), 2)
WScript.CreateObject("WScript.Shell").SendKeys "{F7}" & mydate & "{Enter}" & "{Enter}"

#3:  Author: Cortina PostPosted: Sun Sep 28, 2014 19:59
    —
Спасибо!

#4:  Author: Tol!kLocation: Арзамас PostPosted: Sun Sep 28, 2014 20:11
    —
если скрипт взят с этого форума, то похоже отсюда http://forum.wincmd.ru/viewtopic.php?t=682


Code:
WScript.CreateObject("WScript.Shell").SendKeys "{F7}" & mydate & "{Enter}" & "{Enter}"
у этого кода недостаток: если папка уже существует, то входа не происходит

#5:  Author: FlasherLocation: Москва PostPosted: Sun Sep 28, 2014 20:45
    —
Cortina
Без скриптов (откроет в любом случае):
Code:
TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\nircmd\nircmd.exe execmd md
"%%date:~6%%-%%date:~3,2%%-%%date:~0,2%%" & "%%COMMANDER_EXE%%" /O /S "%P%%date:~6%%-%%date:~3,2%%-%%date:~0,2%%"
wcmicons.dll,83
Создать папку с именем системной даты и перейти в неё

#6:  Author: Cortina PostPosted: Sun Sep 28, 2014 22:19
    —
Спасибо! Very Happy

#7:  Author: FlasherLocation: Москва PostPosted: Mon Jul 17, 2017 21:37
    —
Lavr wrote:
мне будет полезен код, который создаст каталог с текущей датой с автовходом
Поскольку для кнопки выше есть проблема при смене формата даты в региональных настройках, привожу правильный vbs с параметрами и поддержкой длинных путей (260+):
Code:
'============================ VBS ============================
' Создать папку с именем даты формата YYYY-MM-DD и войти в неё
' Параметры: "%P" <разделитель элементов даты> (прим.: "%P" .)
'=============================================================
Set A = WSH.Arguments : P = A(0) & Year(Date) & A(1) & _
Right("0" & Month(Date), 2) & A(1) & Right("0" & Day(Date), 2)
Set WSS = CreateObject("WScript.Shell")
If Len(P) < 260 Then F = P Else F = "\\?\" & P
With CreateObject("Scripting.FileSystemObject")
  If Not .FolderExists(F) Then .CreateFolder F
  V = .GetFileVersion(WSS.ExpandEnvironmentStrings("%COMMANDER_EXE%"))
End With
If Len(P) < 260 Or (Len(P) > 259 And Left(V, InStr(V, ".") - 1) >= 9) Then _
WSS.Exec "%COMMANDER_EXE% /S /O L=""" & P & """"
Если папка уже существовала, то вход осуществится в любом случае.

#8:  Author: sa PostPosted: Thu Jul 20, 2017 11:41
    —
Скрипт с использованием утилиты TCFS2:
Code:
'================================================
' Создать папку формата YYYY-MM-DD и войти в неё
' Требуется утилита TCFS2
'================================================
 TCFS2 = "%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe"
'================================================
 ND = Year(Date) & "-" & Right("0" & Month(Date), 2) & "-" & Right("0" & Day(Date), 2)
 WScript.CreateObject("WScript.Shell").Exec TCFS2 _
 & " /ef ""tcm(907,1) eval(send_wait(`~(" & ND & "{ENTER})`, findwnd(`TCOMBOINPUT`)))" _
 & " eval(send_wait({ENTER}, findwnd(`#32770`),0))" _
 & " set_ini(`%COMMANDER_PATH%\usercmd.ini`, em_Temp, cmd, `cd " & ND & "`) tem(`em_Temp`)"""


Last edited by sa on Tue Jul 25, 2017 12:07; edited 2 times in total

#9:  Author: addhaloka PostPosted: Tue Jul 25, 2017 03:30
    —
Вот ещё варианты с nircmd:
Code:
TOTALCMD#BAR#DATA
"%COMMANDER_PATH%\nircmd.exe" execmd md ~$currdate.yyyy-MM-dd$ &
"%%COMMANDER_EXE%%" /O /S "%P~$currdate.yyyy-MM-dd$"
wcmicons.dll,29
Создать папку yyyy-MM-dd и перейти в неё


-1

TOTALCMD#BAR#DATA
"%COMMANDER_PATH%\nircmd.exe" execmd md ~$currdate.yyyy-MM-dd$_~$currtime.HH-mm-ss$ &
"%%COMMANDER_EXE%%" /O /S "%P~$currdate.yyyy-MM-dd$_~$currtime.HH-mm-ss$"
wcmicons.dll,29
Создать папку yyyy-MM-dd_HH-mm-ss и перейти в неё


-1

p.s. Что-то варианты с nircmd не работают, если в пути присутствует юникод. Папка создаётся, но входа в неё не происходит, вместо этого переход на уровень выше папки с юникодным именем. Confused

#10:  Author: FlasherLocation: Москва PostPosted: Tue Jul 25, 2017 10:14
    —
addhaloka
 Это очередной косячок nircmd с Юникодом.
У %ComSpec% /c такой проблемы нет.

#11:  Author: addhaloka PostPosted: Tue Jul 25, 2017 10:49
    —
Flasher wrote:
Это очередной косячок nircmd с Юникодом.

Не знал, что nircmd не дружит с юникодом. Жаль...

#12:  Author: sa PostPosted: Tue Jul 25, 2017 11:17
    —
TC умеет создавать папки и в ZIP-архивах…

#13:  Author: ZZZAlexZZZ PostPosted: Wed Oct 04, 2017 12:49
    —
Flasher
В данном скрипте
ссылка
при вызове из папки с длиной пути > 247 символов вылетает ошибка:
---------------------------
Windows Script Host
---------------------------
Сценарий: D:\TC\WSH\create_folder_date_LongPath.vbs
Строка: 10
Символ: 32
Ошибка: Файл не найден
Код: 800A0035
Источник: Ошибка выполнения Microsoft VBScript

---------------------------
ОК
---------------------------
Как исправить ошибку для длинных путей?
Для коротких путей работает без проблем.

#14:  Author: Zmy PostPosted: Thu Oct 05, 2017 12:01
    —
У меня этот скрипт работает с более 400 символов.

#15:  Author: ZZZAlexZZZ PostPosted: Thu Oct 05, 2017 12:10
    —
Перепроверил.
Скрипт отрабатывает на локальном жестком диске (остановился на 378 символов, работает).
На сетевой папке, подключенной как диск выдает ту же ошибку. Может быть это поможет?

#16:  Author: Zmy PostPosted: Thu Oct 05, 2017 12:13
    —
На сетевом диске, он может и не работать.

Так на сетевом диске он хотя-бы на 150 срабатывает?

#17:  Author: ZZZAlexZZZ PostPosted: Thu Oct 05, 2017 12:30
    —
На сетевом диске работает до ~240 символов пути (определен на основании колонки плагина [=filex.Длина полного имени])

#18:  Author: Zmy PostPosted: Thu Oct 05, 2017 12:56
    —
Я думаю, что есть несколько возможных причин, по которым он может не работать.

Программное устройство логического диска.
Устройство файловой системы такого диска.
По политикам безопасности могут быть проблемы.

Это же локальная сеть. У каждого компьютера, своё устройство.
А тут - ограничения.

#19:  Author: ZZZAlexZZZ PostPosted: Thu Oct 05, 2017 13:25
    —
На локальном и сетевом диске файловые системы - NTFS.
Скорее всего политика безопасности, mkdir выдает ошибку - "Имя файла или его расширение имеет слишком большую длину."
P.S. Хотя Total легко создает папки и даже не спотыкается...

#20:  Author: Zmy PostPosted: Thu Oct 05, 2017 15:24
    —
ZZZAlexZZZ, попробуйте вот эту программку.

Если будут создаваться папки, то я могу довести её до нужной кондиции.

https://cloud.mail.ru/public/HJDJ/dzZnShFi8

Command:
C:\Temp\CreateDirDate.exe

Parameteres:
"%P"
.


Last edited by Zmy on Sat Oct 07, 2017 11:19; edited 3 times in total

#21:  Author: ZZZAlexZZZ PostPosted: Thu Oct 05, 2017 16:01
    —
Zmy
Папки создаются только на локальном жестком диске, на сетевом диске не создает для путей более ~ 240 символов.

#22:  Author: FlasherLocation: Москва PostPosted: Tue Oct 10, 2017 03:01
    —
ZZZAlexZZZ
UNC-путь к папке сетевого как выглядит?
ZZZAlexZZZ wrote:
Скорее всего политика безопасности, mkdir выдает ошибку - "Имя файла или его расширение имеет слишком большую длину."
Это никак с политиками не может быть связано. md/mkdir/rd/copy/move и т.д. просто напросто такие пути не поддерживают.

#23:  Author: ZZZAlexZZZ PostPosted: Tue Oct 10, 2017 09:51
    —
Flasher
Примерно так - только что нащелкал:
\\dc1.tk.locle\hj\er\Проекты\QSC\HG 220kV Burov\1.Договор\!_Версия договора в печать от Заказчика\2017-10-10\2017-10-10\2017-10-10\2017-10-10\2017-10-10\2017-10-10\2017-10-10\2017-10-10\2017-10-10\2017-10-10\2017-10-10\2017-10-10\2017-10-10\2017-10-10\2017-10-10\2017-10-10\2017-10-10\2017-10-10\
Путь - 245 символов.
Подключен как диск R - \\dc1.tk.locle\hj\er\Проекты\QSC\HG 220kV Burov\
(если это важно)
P.S. создал ручками по этому пути папку 2017-10-10 - и скрипт дальше пошел создавать папки ...\2017-10-10\ ...
Магия и чертовщина какая-то.
P.P.S. Экспериментировал со скриптом - по такому пути на жестком диске не работает
d:\17-10-04\1.Договор-\!_Версия договора в печать от ПРУС\ОТКОРР. Прил.№1.ППР, Прил.№2.РПР, Прил.№19.СПЕЦИФИКАЦИЯ-01.06.2016 (2)_20171004•112600_20171004•112611_20171004•112614_20171004•112616_20171004•112619_20171004•112625\2017-10-04\2017-10-10\

Та же ошибка, total так же создает без проблем папку 2017-10-10

#24:  Author: Zmy PostPosted: Tue Oct 10, 2017 12:51
    —
ZZZAlexZZZ, ну попробуйте ещё один вариант. Скачиваете CreateDirDate.exe.

https://cloud.mail.ru/public/HJDJ/dzZnShFi8

Command:
C:\Temp\CreateDirDate.exe

Parameteres:
""%P""

Если этот вариант не прокатит, тогда не знаю.

#25:  Author: FlasherLocation: Москва PostPosted: Tue Oct 10, 2017 15:55
    —
ZZZAlexZZZ wrote:
На сетевом диске работает до ~240 символов пути
А из чего сложилось 240? Подозрительно как-то.

#26:  Author: ZZZAlexZZZ PostPosted: Tue Oct 10, 2017 23:07
    —
Zmy
windows не дает запустить приложение, virustotatal выдал 7 / 65 срабатываний.
Flasher
Не понял вопроса, по работе на серверы в папки складывают документацию по разным путям.
1) На домашнем компьютере скачал скрипт, создал папку длиной 246 символов(для тестирования, файловая система NTFS):
d:\17-10-04\1.Договор-\!_Версия договора в печать от ПРУС\ОТКОРР. Прил.№1.ППР, Прил.№2.РПР, Прил.№19.СПЕЦИФИКАЦИЯ-01.06.2016 (2)_20171004•112600_20171004•112611_20171004•112614_20171004•112616_20171004•112619_20171004•112625\2017-10-04\2017-10-10\

2) запустил скрипт с параметрами "%P" "-", вылезла ошибка
Code:

---------------------------
Windows Script Host
---------------------------
Сценарий:   D:\crdir.vbs
Строка:   14
Символ:   2
Ошибка:   D:\Total Commander\Totalcmd.exe /S /O L="D:\17-10-04\1.Договор-\!_Версия договора в печать от ПРУС\ОТКОРР. Прил.№1.ППР, Прил.№2.РПР, Прил.№19.СПЕЦИФИКАЦИЯ-01.06.2016 (2)_20171004•112600_20171004•112611_20171004•112614_20171004•112616_20171004•112619_20171004•112625\2017-10-04\2017-10-10" не является приложением Win32.

Код:   800700C1
Источник:    WshShell.Exec

---------------------------
ОК   
---------------------------

3) закомментировал строки скрипта - 13, 14
Ошибка
Code:

---------------------------
Windows Script Host
---------------------------
Сценарий:   D:\crdir.vbs
Строка:   10
Символ:   32
Ошибка:   Файл не найден
Код:   800A0035
Источник:    Ошибка выполнения Microsoft VBScript

---------------------------
ОК   
---------------------------

4) В последней папке создаем последовательно папки, увеличивая длину на единицу, скрипт заработал только при длине пути 249 символов

#27:  Author: FlasherLocation: Москва PostPosted: Wed Oct 11, 2017 00:18
    —
ZZZAlexZZZ
Сперва про диск R: писалось, теперь про D:. У D: какой UNC?

#28:  Author: ZZZAlexZZZ PostPosted: Wed Oct 11, 2017 12:29
    —
Flasher
Первоначально ошибка вылезла на сетевой папке (диск R).
Чтобы исключить влияние политик безопасности и прочее - тестировал на локальном жестком диске D (на работе и дома).
Так понятно?
Caption Description DriveType FileSystem
R: Network Connection 4 NTFS
D: Local Fixed Disk 3 NTFS

#29:  Author: FlasherLocation: Москва PostPosted: Wed Oct 11, 2017 12:37
    —
ZZZAlexZZZ
Нет, не понятно. Я хочу получить ответ на заданный вопрос.
В отношении R я получил:
ZZZAlexZZZ wrote:
Подключен как диск R - \\dc1.tk.locle\hj\er\Проекты\QSC\HG 220kV Burov\

ZZZAlexZZZ wrote:
Чтобы исключить влияние политик безопасности
Я вроде бы вполне ясно дал понять, что политики тут ни при чём.

#30:  Author: ZZZAlexZZZ PostPosted: Wed Oct 11, 2017 12:49
    —
Flasher
На папке D:\17-10-04\ команда total cm_CopyNetNamesToClip
выдает d:\17-10-04\
Как получить по-другому UNC путь не имею представления.

#31:  Author: FlasherLocation: Москва PostPosted: Wed Oct 11, 2017 13:02
    —
ZZZAlexZZZ
ОК. По-другому — net use из cmd.
ZZZAlexZZZ wrote:
скрипт заработал только при длине пути 249 символов
В каком диапазоне НЕ работает? 249 + 1 + 10 = 259. Т. е. результат должен быть, по логике, аналогичен тому, что касается длин, < 259.

#32:  Author: ZZZAlexZZZ PostPosted: Wed Oct 11, 2017 13:21
    —
Flasher
net use
C:\Users\User> net use
Новые подключения будут запомнены.


Состояние Локальный Удаленный Сеть

-------------------------------------------------------------------------------
OK R: \\dc1.tk.locle\hj\er\Проекты\QSC\HG 220kV Burov
Microsoft Windows Network
W: \\webdav.yandex.ru@SSL\DavWWWRoot
Web Client Network
Команда выполнена успешно.

Добавлено спустя 7 минут:

Flasher
Запускал Ваш скрипт БЕЗ 13 и 14 строки вот этим
Code:

Option Explicit
Dim WSH, PthBaseFolder, S, Q, i
Set WSH = CreateObject("WScript.Shell")

' Длина исходной папки 234 символа
PthBaseFolder = "D:\111111111111111111111111111111111111111111111111111111\33333333333333333333333333333333\55555555555555555555\777777777777777777777777777777777\888888888888888888888888888888888888\99999999999999999999\99999999999999999999999999999\"
S = "" : Q = Chr(34)
For i=1 To 20
   S = S & "1"
   WSH.Run "d:\crdir.vbs " & Q & PthBaseFolder & S & "\" & Q & " " & Q & "-" & Q, 1, true
Next
WScript.Quit


Получил вот это
https://yadi.sk/i/Us5j-c053NeuFH
Там где пустая папка - Нет - скрипт создал папку с датой.
Такое ощущение что диапазоны где-то не пересекаются

#33:  Author: FlasherLocation: Москва PostPosted: Wed Oct 11, 2017 13:31
    —
ZZZAlexZZZ
А. D - локальный. Тогда что насчёт этой информации?:
ZZZAlexZZZ wrote:
Скрипт отрабатывает на локальном жестком диске (остановился на 378 символов, работает).
...
Папки создаются только на локальном жестком диске
+
Quote:
P.P.S. Экспериментировал со скриптом - по такому пути на жестком диске не работает
d:\17-10-04\1.Договор-\!_Версия договора в печать от ПРУС\ОТКОРР. Прил.№1.ППР, Прил.№2.РПР, Прил.№19.СПЕЦИФИКАЦИЯ-01.06.2016 (2)_20171004•112600_20171004•112611_20171004•112614_20171004•112616_20171004•112619_20171004•112625\2017-10-04\2017-10-10\


Last edited by Flasher on Wed Oct 11, 2017 13:54; edited 1 time in total

#34:  Author: ZZZAlexZZZ PostPosted: Wed Oct 11, 2017 13:43
    —
Flasher
Забываем всё что было сказано ранее и смотрим на картинку из последнего моего поста.
Скрипт не создает папки при длине пути, передаваемом параметром 237 < "%P" < 248 как на сетевом, так и на локальном жестком диске.

#35:  Author: FlasherLocation: Москва PostPosted: Wed Oct 11, 2017 14:09
    —
ZZZAlexZZZ
Мда. Впервые с таким сталкиваюсь. Какой-то сбой FS.
Получается, что не работает в диапазоне 248 < Path\Name < 259.

Если в скрипте поменять 260 на 249 (дважды) и 259 на 248, какой будет результат?

#36:  Author: ZZZAlexZZZ PostPosted: Wed Oct 11, 2017 14:25
    —
Flasher
Поменял 260 на 249, автовход не задействовал (13 и 14)
Скрипт не создал папку с датой только при длине %P = 237, остальные

#37:  Author: FlasherLocation: Москва PostPosted: Wed Oct 11, 2017 14:46
    —
ZZZAlexZZZ
Значит, меняем на 248. А в 13/14, видимо, и менять ничего не надо. Там же ТС по своим стандартам действует. Их можно раскомментировать.

#38:  Author: ZZZAlexZZZ PostPosted: Wed Oct 11, 2017 14:56
    —
Flasher
В таком виде (замена 260 на 248) скрипт отработал при 237 < "%P" < 248. А также в корне диска и при длинах больше 248.
Спасибо что удалось разобраться.



Total Commander -> Автоматизация Total Commander


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Page 1 of 1

Powered by phpBB © 2001, 2005 phpBB Group