область действия
CHCP должна быть по возможности минимальной...
Во-первых, это избавит скрипт от бессмысленных перекодировок и ускорит его работу...
Во-вторых, предохранит от глюков в реализации этих перекодировок - далеко не все CMD команды корректно её проводят (
FindStr делает это весьма своеобразно), а в некоторых её просто "забыли" реализовать (
REG в локализованной WinXP)
Цитата shadowbat:
как удалить файл cmd после выполнения?
del "%$f%" перед chcp866 не помогает »
|
помогает, нужно только использовать
CALL при вызове батника, иначе это будет последней выполненной командой... если лог работы не нужен, можно запустить
MOVE на выполнение без вывода в промежуточный файл:
читать дальше »
Код:
rem.============================&chcp 1251
set $m=C:\Program Files\*.txt
set $f=%~n0_tst.cmd
set mp=100
rem.============================&chcp 866
for /f "delims=" %%a in ('dir /b/s "%$m%"') do @(
set "b=%%~dpna"& call set "c=%%b:~0,%mp%%%"& call call set "d=%%%%b:%%c%%=%%%%"
if defined d call move "%%a" "%%c%%%%~xa")
Цитата shadowbat:
как сделать только путь до файла без добавления имени файла?»
|
Код:
(for /f "usebackq delims=" %%a in ("2.txt") do @echo %%~dpa)>3.txt
Цитата shadowbat:
а в решении через Autoit если mp<"длины пути до файла" то скрипт работает некорректно »
|
это решается скурпулезным анализом всех возможных вариантов и четкой формулировкой задачи (грубо говоря, чего заказали то и получили), уже отмечал, что некоторые очевидные ситуации в условии не оговорены, например:
- разные имена файлов могут стать одинаковыми, как должен вести себя скрипт: пропускать файл, перезаписывать последним, выдавать запрос или переименовывать по какому-то правилу?
- имя файла может быть потеряно полностью, каковы действия скрипта: перемещать файл с именем папки или пытаться сохранить хотя бы часть имени файла?... возможны и забавные ситуации типа "C:\DIR1\DIR2\.pdf"