View previous topic :: View next topic |
Author |
Message |
gryja
Joined: 21 Nov 2016 Posts: 13
|
(Separately) Posted: Mon Nov 21, 2016 01:02 Post subject: Неправильно генерируются короткие имена по шаблону %p%s2 |
|
|
При нажатии на кнопку "Показать все файлы без подкаталогов" и при выборе двух файлов (а иногда - и одного) неправильно генерируются короткие имена по шаблону %p%s2 для передачи в параметры сторонних программ, например, для открытия файла в шестнадцатеричном редакторе. Я не знаю - баг это, или фича, но такое было в 7-й версии, и сейчас осталось в 8-й. |
|
Back to top |
|
|
Rodny
Joined: 24 Jan 2007 Posts: 949 Location: Могилёв, Беларусь
|
(Separately) Posted: Mon Nov 21, 2016 02:23 Post subject: |
|
|
gryja
Примеры? Не вижу никакой разницы между режимами. Проверял кнопкой
Code: | TOTALCMD#BAR#DATA
cmd
?%p%s2
C:\Windows\system32\cmd.exe
0
-1
|
|
|
Back to top |
|
|
gryja
Joined: 21 Nov 2016 Posts: 13
|
(Separately) Posted: Mon Nov 21, 2016 03:22 Post subject: |
|
|
Например, файл "d:\!!!Downloads\!!!Ready\!!!Games\Valve\Half-Life\Config.rar" не открывается редактором "%COMMANDER_PATH%\Soft\HxD\HxD.exe", когда много файлов показывается без подкаталогов, в параметрах запуска стоит %p%s; но открывается, когда %P%S. Кроме того, часто вместо коротких имён генерируется длинные. У меня написано несколько батников, которых я запускаю через NirCMD, и длинные пути на передачу не прокатывают, нужны короткие.
Добавлено спустя 13 минут:
Вот такой вот путь сгенерировало: "d:\!!!DOW~1\!!!Ready\!!!Games\Valve\Half-Life\Valve\Half-Life\Config.rar" |
|
Back to top |
|
|
MVV
Joined: 15 Oct 2009 Posts: 4811 Location: Ростов-Дон
|
|
Back to top |
|
|
gryja
Joined: 21 Nov 2016 Posts: 13
|
(Separately) Posted: Mon Nov 21, 2016 14:42 Post subject: |
|
|
Команда:
Code: | [em_NirCMD_11]
cmd=%COMMANDER_PATH%\Soft\NirSoft\NirCMD.exe EXECMD
param="SET NAME1="%T%M"&SET NAME2="%P%S2"&"%%COMMANDER_PATH%%\Soft\NirSoft\CompArc.bat"" |
Сам батник:
Code: | SET NAME1=%NAME1:"=%
SET NAME2=%NAME2:"=%
SET A=%NAME2:~2%
IF "%A%"=="%A::=%" GOTO ONE
SET NAME1=%A:*:=%
CALL SET NAME2=%%NAME2:%NAME1%=%%
SET NAME1=%NAME2:~-2%%NAME1%
SET NAME2=%NAME2:~0,-3%
:ONE
IF "%NAME1%"=="%NAME2%" EXIT
FOR %%I IN ("%NAME1%") DO SET D=%%~zI&SET D1=%%~xI
IF %D%==0 EXIT
FOR %%I IN ("%NAME2%") DO SET D=%%~zI&SET D2=%%~xI&SET DP=%%~dpI
IF %D%==0 EXIT
IF EXIST "%DP%3" EXIT
IF /I %D1%%D2%==.RAR.RAR (
"%~dp0..\..\Plugins\arc\WinRAR.exe" T "%NAME1%"
IF ERRORLEVEL 1 EXIT
"%~dp0..\..\Plugins\arc\WinRAR.exe" T "%NAME2%"
IF ERRORLEVEL 1 EXIT
"%~dp0..\..\Plugins\arc\WinRAR.exe" X -Y -CFG- "%NAME1%" "%DP%3\1\"
IF ERRORLEVEL 1 RD /S /Q "%DP%3"&"%~dp0..\..\TOTALCMD.EXE" /O /S /L="%DP%"&EXIT
"%~dp0..\..\Plugins\arc\WinRAR.exe" X -Y -CFG- "%NAME2%" "%DP%3\2\"
IF ERRORLEVEL 1 RD /S /Q "%DP%3"&"%~dp0..\..\TOTALCMD.EXE" /O /S /L="%DP%"&EXIT
) ELSE (
"%~dp0..\..\Plugins\wcx\Total7zip\7zG.exe" T "%NAME1%"
IF ERRORLEVEL 1 EXIT
"%~dp0..\..\Plugins\wcx\Total7zip\7zG.exe" T "%NAME2%"
IF ERRORLEVEL 1 EXIT
"%~dp0..\..\Plugins\wcx\Total7zip\7zG.exe" X -Y -O"%DP%3\1" "%NAME1%"
IF ERRORLEVEL 1 RD /S /Q "%DP%3"&"%~dp0..\..\TOTALCMD.EXE" /O /S /L="%DP%"&EXIT
"%~dp0..\..\Plugins\wcx\Total7zip\7zG.exe" X -Y -O"%DP%3\2" "%NAME2%"
IF ERRORLEVEL 1 RD /S /Q "%DP%3"&"%~dp0..\..\TOTALCMD.EXE" /O /S /L="%DP%"&EXIT
)
"%~dp0..\..\Soft\WinDiff\WinDiff.exe" "%DP%3\1" "%DP%3\2"
"%~dp0..\..\TOTALCMD.EXE" /O
"%~dp0..\..\TOTALCMD.EXE" /O /S /L="%DP%3" |
Вся фишка в том, что слишком длинные пути не вмещаются в командную строку, либо если в именах слишком много пробелов - вылетает ошибка.
Добавлено спустя 3 минуты:
И не только имя Half-Life не переводится в короткое, часто и другие имена - тоже, причём закономерность я так и не нашёл.
Добавлено спустя 30 минут:
Кстати, путь "d:\!!!DOW~1\!!!Ready\!!!Games\Valve\Half-Life\Valve\Half-Life\Config.rar" неправильно сгенерирован не только с точки зрения коротких имён. Правильный путь - "d:\!!!Downloads\!!!Ready\!!!Games\Valve\Half-Life\Config.rar", то есть, "Valve\Half-Life" повторяется два раза. При просмотре я находился в каталоге "d:\!!!Downloads\!!!Ready\!!!Games\". При нахождении в каталоге "d:\!!!Downloads\!!!Ready\" генерируется путь "d:\!!!DOW~1\!!!Ready\!!!Games\Valve\Half-Life\!!!Games\Valve\Half-Life\Config.rar". |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Mon Nov 21, 2016 15:32 Post subject: |
|
|
gryja
Где BBCode? Лучше обернуть, не ждите злых модераторов.
И чтобы облегчать задачу проверяющим приводите код кнопки вместо куска из ini-файла с пользовательской командой. Тут это норма.
gryja wrote: | либо если в именах слишком много пробелов | Т.е. при одном пробеле ошибки нет?
А если убрать кавычки вокруг %T%M?
А какая цель у батника? Какой-то он странный, ИМХО.
Кстати, вот эта строка в батнике явно лишняя:
Code: | "%~dp0..\..\TOTALCMD.EXE" /O |
Что касается лишних папок в путях, то да - это баг для %p. Он берёт не общий родительский каталог, а вычленяет его из элемента под курсором.
MVV, сообщишь? _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
Avada
Joined: 01 Aug 2008 Posts: 10315 Location: Россия, Саратов
|
(Separately) Posted: Mon Nov 21, 2016 17:07 Post subject: |
|
|
gryja
Сообщение с кодами приведено в пристойный вид. Впредь будьте добры делать это самостоятельно. Про остальное сказано выше. _________________ Даже самая богатая фантазия
Не представит себе наши безобразия. |
|
Back to top |
|
|
gryja
Joined: 21 Nov 2016 Posts: 13
|
(Separately) Posted: Mon Nov 21, 2016 17:13 Post subject: |
|
|
Извиняюсь за невнимательность. Сразу не понял - что такое BBCode.
Добавлено спустя 5 минут:
В седьмой версии строка
Code: | "%~dp0..\..\TOTALCMD.EXE" /O |
была не нужна; в восьмой она нужна, когда тотал висит в трее - сначала вытащить тотал из трея, затем - перейти в папку.
Сам батник распаковывает два архива, а затем - сравнивает распакованное при помощи программы WnDiff.
Добавлено спустя 5 минут:
И да, если пробелов не больше 6 (кажется), то ошибки чаще не бывает.
Если убрать кавычки, то строка не сработает. Команда Set остановится только в конце строки. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Mon Nov 21, 2016 17:52 Post subject: |
|
|
Дело в том, что возвращаемые приведёнными параметрами пути оборачиваются в кавычки только при наличии пробелов. Соответственно, Set будет добавлять в таких случаях доп. кавычки. Лучше батнику передавать параметры, убивать лишние кавычки батником и после передавать переменные в SET. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
gryja
Joined: 21 Nov 2016 Posts: 13
|
(Separately) Posted: Mon Nov 21, 2016 19:23 Post subject: |
|
|
Кавычки нужны именно здесь:
Code: | param="SET NAME1="%T%M"&SET NAME2="%P%S2"&"%%COMMANDER_PATH%%\Soft\NirSoft\CompArc.bat"" | , иначе %NAME1% будет равна всей строке до конца, %NAME2% будет отсутствовать как переменная, а батник CompArc.bat вообще не запустится. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Mon Nov 21, 2016 19:27 Post subject: |
|
|
gryja
Что в моём последнем предложении непонятно? _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
gryja
Joined: 21 Nov 2016 Posts: 13
|
(Separately) Posted: Mon Nov 21, 2016 19:32 Post subject: |
|
|
Вот эта строка непонятна: Quote: | после передавать переменные в SET. |
|
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Mon Nov 21, 2016 19:48 Post subject: |
|
|
gryja
Пожалуй, тут надо отказаться от %s в пользу %WL: nircmd.exe execmd test.bat %T%M %WL
А дальше в батнике обрабатывать %1 и %2 (список). _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
MVV
Joined: 15 Oct 2009 Posts: 4811 Location: Ростов-Дон
|
(Separately) Posted: Mon Nov 21, 2016 20:07 Post subject: |
|
|
gryja,
Крайне не советую в переменные окружения в кавычках что-то класть. Кавычки надо ставить вокруг мест использования переменных и параметров, которые потенциально могут содержать пробелы. Если надо обозначить конец значения переменной при установке, можно брать в кавычки её имя и значение:
Code: | SET "NAME1=%T%M" & SET "NAME2=%P%S2" ... |
Но вообще, конечно, правильнее передавать батнику параметры через параметры, а не через переменные, да и кучу путей передавать правильнее через %WL, как предложил Flasher.
Баг зарепортил. _________________ TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel… |
|
Back to top |
|
|
gryja
Joined: 21 Nov 2016 Posts: 13
|
(Separately) Posted: Mon Nov 21, 2016 22:31 Post subject: |
|
|
Я подумывал о работе со списком, но передумал, так как при запуске коммандера от имени пользователя с ограниченными правами список не работает. Кроме того, параметры командной строки, проставленные после батника рассматриваются не как параметры батника, а как параметры программы NirCMD. Запускать COMMAND.COM без NirCMD я не хочу, так как проблемы всё равно не решаются, а запуск от NirCMD выглядит красивее.
Про возможность конструкции Code: | SET "NAME1=%T%M" & SET "NAME2=%P%S2" ... | я не подозревал. Буду тестить. Спасибо. |
|
Back to top |
|
|
|