Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] FTP vs. 'я' или "о проклятой протоколом букве"

Ответить
Настройки темы
CMD/BAT - [решено] FTP vs. 'я' или "о проклятой протоколом букве"

Аватара для Elven

Ветеран


Сообщения: 992
Благодарности: 268

Профиль | Сайт | Отправить PM | Цитировать


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

Отправлено: 16:32, 15-01-2015

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


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

Отправлено: 17:01, 15-01-2015 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Аватара для Elven

Ветеран


Сообщения: 992
Благодарности: 268

Профиль | Сайт | Отправить PM | Цитировать


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

Отправлено: 17:16, 15-01-2015 | #3


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
@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
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:52, 15-01-2015 | #4


Аватара для Elven

Ветеран


Сообщения: 992
Благодарности: 268

Профиль | Сайт | Отправить PM | Цитировать


Цитата Iska:
set sNewName=!sName:я=Я! »
Не знал что так можно.
Весьма круто, спасибо.

Отправлено: 20:06, 15-01-2015 | #5


Ветеран


Сообщения: 874
Благодарности: 575

Профиль | Отправить PM | Цитировать


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





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




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



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

Код: Выделить весь код
@>.txt (
echo яблоко
echo я
echo.я
)
--

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

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


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

Код: Выделить весь код
@<nul>.txt (
set/p="яблоко"
set/p="я"
)
--

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

Цитата:
блоко
.

Отправлено: 22:00, 15-01-2015 | #6


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


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

Отправлено: 22:29, 15-01-2015 | #7


Ветеран


Сообщения: 874
Благодарности: 575

Профиль | Отправить PM | Цитировать


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

Я обещаю.

Iska, как Вы предлагаете вывести в файл символ "я" (именно символ с кодом "0xFF"), сохранив пакетный файл
Код: Выделить весь код
@<nul>.txt set/p="я"
в кодировке OEM-866?

Отправлено: 20:47, 16-01-2015 | #8


Ветеран


Сообщения: 1758
Благодарности: 966

Профиль | Цитировать


Georgio,
chcp 1251
Код: Выделить весь код
@echo off
1>nul chcp 1251

0>nul 1>1.txt (

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

Отправлено: 21:10, 16-01-2015 | #9


Ветеран


Сообщения: 874
Благодарности: 575

Профиль | Отправить PM | Цитировать


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

Код: Выделить весь код
@>nul chcp 1251
@<nul>.txt set/p="яю"
.

Отправлено: 21:45, 16-01-2015 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] FTP vs. 'я' или "о проклятой протоколом букве"

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Использование - Windows Server 2008 - лицензия на 32/64-bit "и" или "или"? Looking Лицензирование продуктов Microsoft 3 12-03-2012 08:22
Ошибка - [решено] Перестал открываться "Блокнот" или где в реестре "живёт" "блокнот". ALEKCEN Microsoft Windows 2000/XP 2 09-03-2011 21:42
[решено] Переменные среды папок "Мои рисунки", "Моя музыка" или общие Redew Автоматическая установка Windows 2000/XP/2003 9 03-10-2009 20:43
Winamp 2.5,"Непонятный глюк" или "Я и компьютер-кто из нас более убогий?" MiGin Хочу все знать 4 23-05-2006 22:09
Когда нажимаю букву"M" или "L","U"...Проблема.. ekodrive Microsoft Windows 2000/XP 7 27-01-2006 15:13




 
Переход