Page 1 of 2
Амперсанд в имени файла несовместим с метасимволом !&
Posted: Mon 02 Sep, 2019 22:10
by S.A.
cat&dog.ext --> ассоциация с !& --> 'dog.ext' is not recognized as an internal or external command, operable program or batch file.
Амперсанд в имени файла несовместим с метасимволом !&
Posted: Mon 02 Sep, 2019 22:21
by HaRT
S.A. wrote: ↑Mon 02 Sep, 2019 22:10
not recognized as an internal or external command, operable program or batch file
И при чём тут ассоциации Фара? Выполняю команду в
cmd.exe
— получаю такой же результат:
Code: Select all
D:\>type cat&dog.txt
The system cannot find the file specified.
'dog.txt' is not recognized as an internal or external command,
operable program or batch file.
А всё потому, что
&
в
cmd
является оператором последовательного выполнения команд. Если имя файла заключить в кавычки, то работает ожидаемо:
Code: Select all
D:\>type "cat&dog.txt"
Cats ate dogs.
Амперсанд в имени файла несовместим с метасимволом !&
Posted: Mon 02 Sep, 2019 23:29
by S.A.
OK, пожалуй, изначально я не вполне удачно впихнул описание в одну строку, поэтому поясню. Тут же речь о другом. Можно и файл с пробелами привести как пример поведения cmd, но при использовании !& фар помещает имя файла с пробелами в кавычки (в отличие от !,!.! и прочих, которые требуют эксплицитного заключения метасимвола в кавычки в ассоциациях). Что вроде бы совершенно логично и ожидаемо, учитывая роль !&.
Амперсанд в имени файла несовместим с метасимволом !&
Posted: Mon 02 Sep, 2019 23:46
by DrKnS
Сабж должен звучать как "фар не позволяет окавычивать имена в генерируемых списках по определённому критерию, поэтому получаемые списки иногда неюзабельны".
Могу предложить по аналогии с !@! добавить модификатор Q - "enclose names in quotes (unconditionally)".
И, соответственно, в !@! Q сделать тоже "unconditionally", а не "containing spaces".
Амперсанд в имени файла несовместим с метасимволом !&
Posted: Mon 02 Sep, 2019 23:48
by HaRT
DrKnS wrote: ↑Mon 02 Sep, 2019 23:46
Могу предложить по аналогии с !@! добавить модификатор Q - "enclose names in quotes (unconditionally)".
И, соответственно, в !@! Q сделать тоже "unconditionally", а не "containing spaces".
Горячо поддерживаю! А как это будет записываться в случае с
!&
?
!&Q
? Просто иначе возникает синтаксическая неоднозначность.
Кстати, вместо безусловного закавычивания можно проверять наличие не пробелов, а символов из
System.QuotedSymbols
— тогда поведение будет единообразным с той частью Фара. Впрочем, я не вижу у безусловного закавычивания недостатков, кроме потенциального нарушения совместимости каких-то экзотических сохранённых ассоциаций/команд.
Амперсанд в имени файла несовместим с метасимволом !&
Posted: Tue 03 Sep, 2019 00:23
by S.A.
I, for one, буду безусловно welcomе любую реализацию, признанную кворумом оптимальной.
Амперсанд в имени файла несовместим с метасимволом !&
Posted: Tue 03 Sep, 2019 01:06
by DrKnS
HaRT wrote: ↑Mon 02 Sep, 2019 23:48!&Q
Да.
я не вижу у безусловного закавычивания недостатков
Я тоже. 5464.
Амперсанд в имени файла несовместим с метасимволом !&
Posted: Tue 03 Sep, 2019 09:03
by S.A.
Спасибо!
Пара мелочей:
В русском хелпе:
опечатка:
Code: Select all
^<wrap>Например, #!&Q# - имена помеченных файлов, заключеные в кавычки.
Code: Select all
^<wrap>Например, #!&Q# - имена помеченных файлов, заключенные в кавычки.
В английском хелпе:
Code: Select all
^<wrap>For example, #!&Q# means the list of selected file names in quotes
я бы переформулировал как
Code: Select all
^<wrap>For example, #!&Q# denotes the list of selected file names, each enclosed in quotes.
ну и заодно:
Code: Select all
^<wrap>For example, #!@@AFQ!# means "name of file with the list of
selected file names, in ANSI encoding, include full pathnames, in quotes".
Code: Select all
^<wrap>For example, #!@@AFQ!# denotes "name of file containing the list of
selected file names, in ANSI encoding, with full pathnames, each enclosed in quotes".
means -> denotes -- просто для единообразия c текстом выше
Амперсанд в имени файла несовместим с метасимволом !&
Posted: Tue 03 Sep, 2019 14:31
by HaRT
DrKnS wrote: ↑Tue 03 Sep, 2019 01:06Я тоже. 5464.
Спасибо.
Но у меня
радикальный вопрос: в каких случаях может потребоваться НЕ закавычивать имена файлов, когда они идут списком без разбиения на строки? Может, пока никто не успел привыкнуть, сделать
закавычивание по умолчанию хотя бы для
!&
и
!&~
, а модификатор (например
q
) использовать для НЕ-закавычивания?
Амперсанд в имени файла несовместим с метасимволом !&
Posted: Tue 03 Sep, 2019 15:29
by zg
HaRT wrote: ↑Tue 03 Sep, 2019 14:31в каких случаях может потребоваться НЕ закавычивать имена файлов, когда они идут списком без разбиения на строки?
HaRT wrote: ↑Tue 03 Sep, 2019 14:31а модификатор (например
q
) использовать для НЕ-закавычивания?
у меня когнитивный диссонанс.
Амперсанд в имени файла несовместим с метасимволом !&
Posted: Tue 03 Sep, 2019 16:47
by HaRT
zg wrote: ↑Tue 03 Sep, 2019 15:29
у меня когнитивный диссонанс
Попытаюсь объяснить чуть более формально.
1. Я не знаю, когда может понадобиться в
!&
НЕ закавычивать. Но это не означает, что в каком-то (экзотическом) сценарии кавычки всё-таки что-то не сломают.
2. Поскольку я уверен, что закавычивать в одной строке надо (почти?) всегда, я предлагаю сделать это вариантом по умолчанию, т.е. при отсутствии какого-либо модификатора.
3. Чтобы дать пользователем экзотических сценариев возможность всё-таки получить список незакавыченных имён файлов, я предлагаю добавить новый модификатор. И, в знак противопоставления модификатору
Q
(смысл которого в том, чтобы закавычивать) я предлагаю выбрать в качестве этого нового «отрицательного» модификатора
q
(НЕ закавычивать).
Так моя позиция стала понятнее?
Амперсанд в имени файла несовместим с метасимволом !&
Posted: Tue 03 Sep, 2019 23:05
by DrKnS
S.A., спасибо, поправил.
HaRT, Q
в !&
сейчас единообразно с Q
в !@!
.
Единообразие - это хорошо, разнобой - это не очень хорошо.
А менять !@! уже не представляется возможным.
Амперсанд в имени файла несовместим с метасимволом !&
Posted: Tue 03 Sep, 2019 23:19
by HaRT
DrKnS wrote: ↑Tue 03 Sep, 2019 23:05Q
в
!&
сейчас единообразно с
Q
в
!@!
.
Единообразие - это хорошо, разнобой - это не очень хорошо.
А менять !@! уже не представляется возможным.
Полностью согласен. Именно поэтому я в противоположность заглавной
Q
предлагаю строчную
q
(я проверил, сейчас она не имеет специального значения) — подобно тому, как в регэкспах при обозначении классов символов заглавная и соответствующая строчная буква имеют противоположное значение (например,
\w
и
\W
). А изменить умолчание со старого, которое часто не работает, на новое, которое будет работать практически всегда, — это ли не полезное изменение?
Т.е. я предлагаю так:
!&Q
— закавычивать;
!&q
— НЕ закавычивать;
!&
—
закавычивать.
Амперсанд в имени файла несовместим с метасимволом !&
Posted: Tue 03 Sep, 2019 23:26
by HaRT
DrKnS wrote: ↑Tue 03 Sep, 2019 23:05
Единообразие - это хорошо, разнобой - это не очень хорошо.
А менять !@! уже не представляется возможным.
Предвосхищая довод о том, что, казалось бы, получится несоответствие в умолчаниях для
!@!
и
!&
: так ведь у них и характер формируемых данных ощутимо разный. В одном случае каждое имя файла располагается на отдельной строке, т.ч. их между собой не спутаешь; а во втором случае имена с пробелами без закавычивания склеиваются в общее месиво. Поэтому разное умолчание в части закавычивания для этих двух случаев я считаю совершенно оправданным.
Амперсанд в имени файла несовместим с метасимволом !&
Posted: Tue 03 Sep, 2019 23:31
by DrKnS
Я в целом не против.
Могу сделать, если не будет возражений и если напишете хелп, и деньгихелп - вперед :)