Ander_73
- Стаж: 7 лет 11 месяцев
- Сообщений: 3950
- Репутация:127[+] [-]
|
loban_ser, я предлагаю тебе опробовать свой вариант на себе. Чтобы ты лучше понял, о чём идет речь, помести файл в папку C:\Windows\System32 и расширение дай нормальное: dll или exe. А потом смело запускай свою команду!
|
nikzzzz
- Стаж: 10 лет
- Сообщений: 3114
- Репутация:127[+] [-]
|
Ander_73 Проблема с перекодировками Если поставить в начало chcp 1251, то файл нормально удаляется (батник должен быть в ANSI) Но в 1251 этот символ имеет код 0x95 .
|
Ander_73
- Стаж: 7 лет 11 месяцев
- Сообщений: 3950
- Репутация:127[+] [-]
|
nikzzzz, не понял.set "fname=\path\* name.txt" chcp 1251 del /q "%fname%" Ну, ясно, что * - это 0х7 как-бы... Не работает ни разу. Я пробовал перекодировки. И 1251 и 65001. И vbs пробовал. Стал бы я вопросы задавать... Добавлено через 10 минут 45 секунд: Вообще, конкретно данный случай можно обойти так:set "fname=\path\* name.txt" ... set "fname=%fname:*=?%" del "%fname%" * - это 0х7 якобы; ... и то при условии, что в папке больше нет файлов вида "? name.txt" Но хотелось бы общего решения...
|
nikzzzz
- Стаж: 10 лет
- Сообщений: 3114
- Репутация:127[+] [-]
|
Ander_73,chcp 1251 set "fname=\path\* name.txt" del /q "%fname%" * - код 0x95 Код символа я посмотрел такchcp 1251 for /f "delims=" %%a in ('dir /b *name.txt') do set file="%%a" echo %file% >file.asc echo %file% Далее посмотрел file.asc в hex редакторе
|
Ander_73
- Стаж: 7 лет 11 месяцев
- Сообщений: 3950
- Репутация:127[+] [-]
|
nikzzzz, если снимать листинг в 1251, то да. А если есть только листинг в 866?
|
nikzzzz
- Стаж: 10 лет
- Сообщений: 3114
- Репутация:127[+] [-]
|
71615А если есть только листинг в 866? Батник не воспринимает коды <0x20, если только как-то через переменные передавать.
|
Отправлено: 19-Ноя-2019 00:00
(спустя 1 час 39 минут)
stea.61
- Стаж: 9 лет
- Сообщений: 695
- Репутация:107[+] [-]
- Откуда: 61 RUS
|
Всем привет.71617Батник не воспринимает коды <0x20, если только как-то через переменные передавать. Возможно ошибаюсь, но в случае, приведенном Ander_73 в качестве примера, и не требуется в батнике использовать код - нужно лишь присвоить переменной %fname% правильное имя файла. Например, в каталоге "\Totalcmd\Plugins\WFX\WebDAV" приложенного архива находится файл с именем "• WebDAV.info". bat-никchcp 1251 set "fname=\path\• WebDAV.info" del /q "%fname%" прекрасно исполняется.
|
Gemostarter
- Стаж: 7 лет 10 месяцев
- Сообщений: 323
- Репутация:35[+] [-]
|
Ander_73, вставить символ BEL (и любой другой) прямо в батник, не? З.Ы. В порядке "побурчать": как бедный cmd ещё не надорвался от задач, что вы на него возлагаете...
|
Ander_73
- Стаж: 7 лет 11 месяцев
- Сообщений: 3950
- Репутация:127[+] [-]
|
stea.61, nikzzzz уже дал этот вариант. Если изначально получать имя файла в 1251, то всё ок. Именно потому, что в этом случае получаем 0х95, который команда DEL нормально воспринимает. nikzzzz, как раз в переменной всё отлично. И символ 0х7 там тоже "прокатывает". Треш начинается при "консольном выводе" (не знаю, как правильнее выразить), когда 0х7 не выводится, а обрабатывается, то есть играется "колокольчик" (BEL). На данный момент формулирую так: как имея листинг в 866 таки удалить проклятый файл?
|
UserX
- Стаж: 9 лет 9 месяцев
- Сообщений: 869
- Репутация:40[+] [-]
|
результат поставленной задачи (пардон)71622как имея листинг в 866 таки удалить проклятый файл? Результат задачи: Выведено из строя (сгорело) 3 инженера и бессчётное количество завсегдатаев...
|
stea.61
- Стаж: 9 лет
- Сообщений: 695
- Репутация:107[+] [-]
- Откуда: 61 RUS
|
71622как имея листинг в 866 таки удалить проклятый файл? Привет. А если все же просто менять кодовую страницу по ходу bat-ника? В начале можно сформировать нужный набор символов в виде переменных и использовать их по мере надобности. Примерно так:chcp 1251 set "s1=•" & set "s2=©" & set "s3=±" chcp 866 del /q "\Totalcmd\Plugins\WFX\WebDAV\%s1% WebDAV.info" Ну, или можно задать список символов и использовать его в циклах:chcp 1251 set "s1=•" & set "s2=©" & set "s3=±" & set "tbs=• © ±" chcp 866 for %%i in (%tbs%) do ( del /q "\Totalcmd\Plugins\WFX\WebDAV\%%i WebDAV.info" ) Не сгодится?
|
Ander_73
- Стаж: 7 лет 11 месяцев
- Сообщений: 3950
- Репутация:127[+] [-]
|
stea.61, Я же говорил, хочется общего решения проблемы, а не конкретно "с символом 0х7 в начале имени файла". Если есть возможность пересоздать листинг файлов в 1251, то проблема решается, тоже уже говорил. Теперь хочется придумать, как быть, если у меня уже есть листинг, но в кодировке 866.
|
loban_ser
- Стаж: 6 лет 11 месяцев
- Сообщений: 577
- Репутация:24[+] [-]
|
Ander_73, может получится что-нибудь придумать с такой комбинацией Использовать флаг и выполнить chcp 866 всего 1 раз, и затем сразу сбросить флаг@Echo off SetLocal chcp 1251>nul set "fil=• WebDAV.dll" Set LanguageFlag=true If Not Exist TEMP md TEMP for /f "delims=" %%A in ('dir /b /s /a:-d "%Fil%"') do ( if defined LanguageFlag (chcp 866>nul& Set LanguageFlag=) chcp Echo %%A copy /y "%%A" "TEMP\%%~nxA" del /q "TEMP\%Fil%" ) как пример Предварительно записать имена файлов во временный файл. Вернуть кодировку по-умолчанию. Циклом читать данные из сформированного файла.Echo off SetLocal chcp 1251>nul set "fil=• WebDAV.dll" If Not Exist TEMP md TEMP dir /b /s /a:-d "%Fil%">%temp%\tempfile.tmp for /f "UseBackQ delims=" %%A in ("%temp%\tempfile.tmp") do ( Echo %%A copy /y "%%A" "TEMP\%%~nxA" ) chcp 866>nul del "%temp%\tempfile.tmp" chcp pause в батнике оформить как фунцию@for %i in ("• *") do chcp 1251>nul&&del /q "%i"&&chcp 866 @for %i in ("? *") do chcp 1251>nul&&del /q "%i"&&chcp 866
|
loban_ser
- Стаж: 6 лет 11 месяцев
- Сообщений: 577
- Репутация:24[+] [-]
|
qwea2005, в PowerShell вообще много чего можно, там встроен полноценный движок по регулярка,нежели в cmd, но лучше всего с этим справляется перл
|
Страница 2 из 3
Текущее время: 29-Янв 03:34
Часовой пояс: UTC + 3
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете прикреплять файлы к сообщениям Вы можете скачивать файлы
|
|