Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] FTP vs. 'я' или "о проклятой протоколом букве" (http://forum.oszone.net/showthread.php?t=293966)

Elven 15-01-2015 16:32 2456496

FTP vs. 'я' или "о проклятой протоколом букве"
 
Согласно RFC 959 протокол FTP не понимает русскую букву «я». Происходит это потому, что в кодировке cp1251 эта буква кодируется как «FF». А это окончание передачи данных. Таким образом мы получаем особенность не позволяющую скачивать с FTP файлы и директории содержащие букву «я». (c)
Кроме того как-то было дело настраивалась синхронизация с FTP.
Но то была преамбула, амбула у нас впереди. Повадились пользователи файло в папки обменочные закидывать с той самой проклятой протоколом буквой, а они (файлы) от этого немного совсем не копируются, посему было принято решение переименовывать файлы (менять "я" на "Я"). Теперь наконец два вопроса для тех кто еще не окончательно заколебался читать вышеизложенную белиберду.
- Возможно ли реализовать описанное выше на cmd/bat?
- Возможно ли каким-то красивым образом дополнить то, что было сделано ранее, дабы не плодить лишние задачи в шедулере?

Iska 15-01-2015 17:01 2456516

Цитата:

Цитата Elven
Возможно ли реализовать описанное выше на cmd/bat? »

Реализовать что именно?

Elven 15-01-2015 17:16 2456529

Iska, переименование файлов. Например чтобы файл с именем "показатели мятателей молота.xlsx" был переименован в "показатели мЯтателей молота.xlsx"

Iska 15-01-2015 18:52 2456595

Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFolder=E:\Песочница\0421

if exist "%sSourceFolder%\." (
        pushd "%sSourceFolder%"
       
        for /f "usebackq delims=" %%i in (
                `2^>nul dir /b /a:-d "*.*"`
        ) do (
                set sName=%%~i
                set sNewName=!sName:я=Я!
               
                if "!sName!" neq "!sNewName!" (
                        ren "!sName!" "!sNewName!"
                )
        )
       
        popd
) else (
        echo Can't find source folder [%sSourceFolder%].
        exit /b 1
)

endlocal
exit /b 0


Elven 15-01-2015 20:06 2456632

Цитата:

Цитата Iska
set sNewName=!sName:я=Я! »

Не знал что так можно.
Весьма круто, спасибо.

Georgio 15-01-2015 22:00 2456685

Цитата:

Цитата Elven
с той самой проклятой протоколом буквой »






Строчная буква "я" "проклята" не только "протоколом", но и интерпретатором командной строки, во всяком случае, в современных ОС Windows.




Информация к размышлению (Windows 8.1):



код пакетного файла в кодировке Win-1251:

Код:

@>.txt (
echo яблоко
echo я
echo.я
)

--

вывод результата в файл:

Цитата:

яблоко
ђҐ¦Ё¬ ўлў®¤* Є®¬**¤ ** нЄа** (ECHO) ўЄ«озҐ*.
я
;


код пакетного файла в кодировке Win-1251:

Код:

@<nul>.txt (
set/p="яблоко"
set/p="я"
)

--

вывод результата в файл:

Цитата:

блоко
.

Iska 15-01-2015 22:29 2456702

Georgio, никто и не обещал работоспособность пакетных файлов в кодировке, отличной от OEM.

Georgio 16-01-2015 20:47 2457187

Цитата:

Цитата Iska
Georgio, никто и не обещал работоспособность пакетных файлов в кодировке, отличной от OEM. »


Я обещаю:).

Iska, как Вы предлагаете вывести в файл символ "я" (именно символ с кодом "0xFF"), сохранив пакетный файл
Код:

@<nul>.txt set/p="я"
в кодировке OEM-866?

Foreigner 16-01-2015 21:10 2457198

Georgio,
chcp 1251
Код:

@echo off
1>nul chcp 1251

0>nul 1>1.txt (

        set/p="я"
        set /p="яблоко"
       
)


Georgio 16-01-2015 21:45 2457212

Foreigner, всё верно. Когда писал:
Цитата:

Цитата Georgio
Я обещаю:). »

,
я это и имел в виду. И это как раз пример того, что именно сохранение самого пакетного файла в кодировке OEM-866 приводит к его неработоспособности. А символ "я" очень актуален для пакетных файлов, например, тогда, когда нужно вставить BOM:

Код:

@>nul chcp 1251
@<nul>.txt set/p="яю"

.

Iska 17-01-2015 01:50 2457320

Цитата:

Цитата Georgio
Я обещаю. »

«Нэ вэрю» (с) ;).

Цитата:

Цитата Georgio
Iska, как Вы предлагаете вывести в файл символ "я" (именно символ с кодом "0xFF"), сохранив пакетный файл »

Разве 0xFF? 0xEF.

Например, вот так:
Код:

@echo off
<nul >0001.txt set /p sVar=*

введя символ с кодом 0xFF после знака равенства. И именно он будет выведен в файл «0001.txt». Безо всяких «chcp» туда-сюда.

Update: движок форума подменил символ с кодом 0xFF на звёздочку. Я пользовался редактором Far Manager'а.

Georgio 17-01-2015 04:01 2457336

Цитата:

Цитата Iska
Цитата:

Цитата Georgio
Я обещаю. »

«Нэ вэрю» (с) :wink:. »


«Какьие ваши доказательства?!» (c):wink::).



Цитата:

Цитата Iska
Цитата:

Цитата Georgio
Iska, как Вы предлагаете вывести в файл символ "я" (именно символ с кодом "0xFF"), сохранив пакетный файл »

Разве 0xFF? 0xEF. »


Символ "я" -- это именно символ с кодом "0xFF":
Код:

MsgBox Hex(Asc("я"))
.



Цитата:

Цитата Iska
Например, вот так:
Код:

@echo off
<nul >0001.txt set /p sVar=*

введя символ с кодом 0xFF после знака равенства. И именно он будет выведен в файл «0001.txt». Безо всяких «chcp» туда-сюда.

Update: движок форума подменил символ с кодом 0xFF на звёздочку. Я пользовался редактором Far Manager'а. »


B Windows 7, 8, 8.1 "не пройдёт". "Тамошний" "%ComSpec%" игнорирует символы пробела, символы табуляции и символ "я" (очевидно, также воспринимая его за "пустоту"), если эти символы находятся в начале выводимой строки:

Код:

@<nul>.txt set/p="я        я яблоко"
--
Цитата:

блоко
.

Правда, в случае символа "я" речь идёт только о пакетных файлах, в командной строке с этим символом всё нормально.

Iska 17-01-2015 04:55 2457340

Цитата:

Цитата Georgio
Символ "я" -- это именно символ с кодом "0xFF": »

Это в ANSI/1251.

Цитата:

Цитата Georgio
B Windows 7, 8, 8.1 "не пройдёт". "Тамошний" "%ComSpec%" игнорирует символы пробела, символы табуляции и символ "я" (очевидно, также воспринимая его за "пустоту"), если эти символы находятся в начале выводимой строки: »

Это печально :(. И ещё один «гвоздь в гроб» пакетных файлов.

Цитата:

Цитата Georgio
«Какьие ваши доказательства?!» (c). »

«Усы, вот, и хвост — вот мои документы» доказательства! ;)

LehaMechanic 17-01-2015 07:51 2457350

Ужас какой.... Читаю и волосы на голове шевелятся, какие дикости в нашем веке бывают...


Цитата:

Цитата Iska
«Усы, вот, и хвост — вот мои документы» доказательства! »

В оригинале не так :)
"Усы, лапы, хвост - вот мои документы!"

Iska 17-01-2015 07:56 2457352

Цитата:

Цитата LehaMechanic
В оригинале не так
"Усы, лапы, хвост - вот мои документы!" »

Твою дивизию! Это ж сколько лет мне совсем не то слышалось, а?! Надо ж так опростоволоситься… :(


Время: 21:11.

Время: 21:11.
© OSzone.net 2001-