2009-09-02 5 views
0

Я написал код Ruby для проверки ZIP-файлов как части внутреннего процесса компании. Обычно мы запускаем этот код из веб-браузера. Когда вы нажимаете для загрузки файла, вы выбираете «open with» и указываете полный путь к небольшому пакетному файлу. Это одна линия пакетный файл выглядит следующим образом:Как заставить Firefox открывать файл с амперсандом в имени файла?

\\mathworks\public\Matthew_Simoneau\ruby-1.8.7-p72-i386-mswin32\bin\ruby.exe "%~dp0inspect.rb" %1 

Насколько я знаю, этот метод является единственным простым способом запустить свой код на Ruby на машине Windows, которая не имеет рубин установлен, но есть доступ к внутренней файловой системе компании.

У меня возникла проблема, когда имя файла ZIP содержит амперсанд.

Это прекрасно работает на IE и Chrome, где выше строка получает «расширенной», чтобы следующее:

C:\WINNT\Profiles\matthew\Desktop>\\mathworks\public\Matthew_Simoneau\ruby-1.8.7-p72-i386-mswin32\bin\ruby.exe "\\mathworks\public\Matthew_Simoneau\sandbox\inspect\inspect.rb" "C:\WINNT\Profiles\matthew\Local Settings\Temporary Internet Files\Content.IE5\VNATJ3X0\park&park_paper_LMI_neuralN[1].zip" 

В Firefox, однако, все после того, как амперсанд в имени файла потеряется на полу:

H:\>\\mathworks\public\Matthew_Simoneau\ruby-1.8.7-p72-i386-mswin32\bin\ruby.exe "\\mathworks\public\Matthew_Simoneau\sandbox\inspect\inspect.rb" C:\Temp\park 

Я попытался положить %1 в кавычки в пакетном файле, но это не имеет никакого эффекта.

Я подозреваю, что это ошибка в Firefox. Я искал список ошибок Firefox, но ничего не нашел.

Я делаю что-то неправильно здесь? Это ошибка Firefox? Если да, есть ли способ, которым я могу обойти это? Есть ли более надежный способ запустить мой Ruby-код из веб-браузера?

Обновление: Я подал a bug report с Bugzilla @ Mozilla, но ответа еще нет.

ответ

1

Поскольку вы, очевидно, не имеете никакого контроля над почтовыми именами файлов, вы можете сделать следующее в коде Ruby, ...

Если имя файла не существует, посмотрите в той же папке для любого файла с базовым переданным именем файла, за которым следует « * .zip».

Это будет работать для «park & park.zip», если в папке с именем, скажем, «park & foo.zip» нет также zip-файла.

Если существует реальный потенциал для столкновения имени файла (то есть, молнии не очищаются от машины пользователя, а амперсанды являются общими), единственным решением может быть использование подключаемого модуля диспетчера загрузки в Firefox, который имеет возможность повторной записи имени файла для фиксации любых амперсандов по пути вниз.

+0

Это хорошая идея для обходного пути. Благодаря! –

-1

Кодируйте амперсанд для достижения лучших результатов ...

& 

Как и в

C:\WINNT\Profiles\matthew\Desktop>\\mathworks\public\Matthew_Simoneau\ruby-1.8.7-p72-i386-mswin32\bin\ruby.exe "\\mathworks\public\Matthew_Simoneau\sandbox\inspect\inspect.rb" "C:\WINNT\Profiles\matthew\Local Settings\Temporary Internet Files\Content.IE5\VNATJ3X0\park&park_paper_LMI_neuralN[1].zip" 
+0

Как? Когда я дойду до командного файла, повреждение уже сделано. –

1

Я просто проверял что-то подобное с Firefox 3.5.2 на Linux, и это хорошо работает (т.е. оболочки скрипт получает правильный путь).

Вы должны сначала попытаться использовать скрипт так:

echo %1 > c:\temp\test.txt 

(надеюсь, что это правильный синтаксис, я не использовал CMD в течение длительного времени)

... и посмотреть, если вы получите правый путь в этом файле. Если амперсанд также разделен в этом файле, и вы используете последнюю версию Firefox, это означает, что вы обнаружили ошибку, определенную для платформы Windows, и вы должны сообщить об этом.

+0

Я не уверен, что это * - ошибка. Я подозреваю, что это связано с UNC-путями, которые могут быть более ограниченными, чем допустимые символы локальной файловой системы в именах файлов. – richardtallent

+0

Если файл правильно сохранен браузером, я не думаю, что это может быть так. –

+0

Михал, сохранение файла полностью отличается от его открытия из файловой системы через гиперссылку. Первый не ограничивается синтаксисом URI файла, последним. – richardtallent