Неправильно генерируются короткие имена по шаблону %p%s2
Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер
Неправильно генерируются короткие имена по шаблону %p%s2
При нажатии на кнопку "Показать все файлы без подкаталогов" и при выборе двух файлов (а иногда - и одного) неправильно генерируются короткие имена по шаблону %p%s2 для передачи в параметры сторонних программ, например, для открытия файла в шестнадцатеричном редакторе. Я не знаю - баг это, или фича, но такое было в 7-й версии, и сейчас осталось в 8-й.
gryja
Примеры? Не вижу никакой разницы между режимами. Проверял кнопкой
Примеры? Не вижу никакой разницы между режимами. Проверял кнопкой
Код: Выделить всё
TOTALCMD#BAR#DATA
cmd
?%p%s2
C:\Windows\system32\cmd.exe
0
-1
Например, файл "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"
Добавлено спустя 13 минут:
Вот такой вот путь сгенерировало: "d:\!!!DOW~1\!!!Ready\!!!Games\Valve\Half-Life\Valve\Half-Life\Config.rar"
Команда:
Сам батник:
Вся фишка в том, что слишком длинные пути не вмещаются в командную строку, либо если в именах слишком много пробелов - вылетает ошибка.
Добавлено спустя 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".
Код: Выделить всё
[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""Код: Выделить всё
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".
gryja
Где BBCode? Лучше обернуть, не ждите злых модераторов.
И чтобы облегчать задачу проверяющим приводите код кнопки вместо куска из ini-файла с пользовательской командой. Тут это норма.
А если убрать кавычки вокруг %T%M?
А какая цель у батника? Какой-то он странный, ИМХО.
Кстати, вот эта строка в батнике явно лишняя:
Что касается лишних папок в путях, то да - это баг для %p. Он берёт не общий родительский каталог, а вычленяет его из элемента под курсором.
MVV, сообщишь?
Где BBCode? Лучше обернуть, не ждите злых модераторов.
И чтобы облегчать задачу проверяющим приводите код кнопки вместо куска из ini-файла с пользовательской командой. Тут это норма.
Т.е. при одном пробеле ошибки нет?gryja писал(а):либо если в именах слишком много пробелов
А если убрать кавычки вокруг %T%M?
А какая цель у батника? Какой-то он странный, ИМХО.
Кстати, вот эта строка в батнике явно лишняя:
Код: Выделить всё
"%~dp0..\..\TOTALCMD.EXE" /OMVV, сообщишь?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Извиняюсь за невнимательность. Сразу не понял - что такое BBCode.
Добавлено спустя 5 минут:
В седьмой версии строка
была не нужна; в восьмой она нужна, когда тотал висит в трее - сначала вытащить тотал из трея, затем - перейти в папку.
Сам батник распаковывает два архива, а затем - сравнивает распакованное при помощи программы WnDiff.
Добавлено спустя 5 минут:
И да, если пробелов не больше 6 (кажется), то ошибки чаще не бывает.
Если убрать кавычки, то строка не сработает. Команда Set остановится только в конце строки.
Добавлено спустя 5 минут:
В седьмой версии строка
Код: Выделить всё
"%~dp0..\..\TOTALCMD.EXE" /OСам батник распаковывает два архива, а затем - сравнивает распакованное при помощи программы WnDiff.
Добавлено спустя 5 минут:
И да, если пробелов не больше 6 (кажется), то ошибки чаще не бывает.
Если убрать кавычки, то строка не сработает. Команда Set остановится только в конце строки.
Дело в том, что возвращаемые приведёнными параметрами пути оборачиваются в кавычки только при наличии пробелов. Соответственно, Set будет добавлять в таких случаях доп. кавычки. Лучше батнику передавать параметры, убивать лишние кавычки батником и после передавать переменные в SET.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Кавычки нужны именно здесь:
, иначе %NAME1% будет равна всей строке до конца, %NAME2% будет отсутствовать как переменная, а батник CompArc.bat вообще не запустится.
Код: Выделить всё
param="SET NAME1="%T%M"&SET NAME2="%P%S2"&"%%COMMANDER_PATH%%\Soft\NirSoft\CompArc.bat""gryja
Пожалуй, тут надо отказаться от %s в пользу %WL: nircmd.exe execmd test.bat %T%M %WL
А дальше в батнике обрабатывать %1 и %2 (список).
Пожалуй, тут надо отказаться от %s в пользу %WL: nircmd.exe execmd test.bat %T%M %WL
А дальше в батнике обрабатывать %1 и %2 (список).
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
gryja,
Крайне не советую в переменные окружения в кавычках что-то класть. Кавычки надо ставить вокруг мест использования переменных и параметров, которые потенциально могут содержать пробелы. Если надо обозначить конец значения переменной при установке, можно брать в кавычки её имя и значение:
Но вообще, конечно, правильнее передавать батнику параметры через параметры, а не через переменные, да и кучу путей передавать правильнее через %WL, как предложил Flasher.
Баг зарепортил.
Крайне не советую в переменные окружения в кавычках что-то класть. Кавычки надо ставить вокруг мест использования переменных и параметров, которые потенциально могут содержать пробелы. Если надо обозначить конец значения переменной при установке, можно брать в кавычки её имя и значение:
Код: Выделить всё
SET "NAME1=%T%M" & SET "NAME2=%P%S2" ...Баг зарепортил.
Я подумывал о работе со списком, но передумал, так как при запуске коммандера от имени пользователя с ограниченными правами список не работает. Кроме того, параметры командной строки, проставленные после батника рассматриваются не как параметры батника, а как параметры программы NirCMD. Запускать COMMAND.COM без NirCMD я не хочу, так как проблемы всё равно не решаются, а запуск от NirCMD выглядит красивее.
Про возможность конструкции я не подозревал. Буду тестить. Спасибо.
Про возможность конструкции
Код: Выделить всё
SET "NAME1=%T%M" & SET "NAME2=%P%S2" ...