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

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

Ответить
Настройки темы
CMD/BAT - [решено] убрать точку в цикле из расширения файла

Старожил


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

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


Изменения
Автор: shadowbat
Дата: 24-09-2019
есть код
Код: Выделить весь код
for %%i in ("%CD%\*.txt") do ( 
echo %%~nxi
)
pause
нужно, чтобы вместо "name.txt" выводились "name-txt" или "name txt"

этот код работает только с setlocal EnableDelayedExpansion
Код: Выделить весь код
for %%i in ("%CD%\*.txt") do ( 
echo %%~xi
set "qqn=%%~ni"
set "qqx=%%~xi"
setlocal EnableDelayedExpansion
echo !qqn!!qqx!
echo !qqx:.=-!
echo !qqx:~1,3!
set qq1=!qqx:.=-!
set qq2=!qqx:~1,3!
echo !qq1!
echo !qq2!
set qq3=!qqn!!qq1!
set qq4=!qqn! !qq2!
echo !qq3!
echo !qq4!
set qq5=!qqn!!qqx:.=-!
set qq6=!qqn! !qqx:~1,3!
echo !qq5!
echo !qq6!
endlocal
)
pause
какие еще есть варианты, только без EnableDelayedExpansion ? и без goto

Отправлено: 21:59, 22-09-2019

 

Ветеран


Contributor


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

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


хм, а так не работает: -еще как работает, если говорить об эхо
Код: Выделить весь код
@Echo Off
	For %%i in ("%CD%\*.txt") Do (
		Set "Ext=%%~xi"
		Call Echo "%%~ni-%%Ext:~1%%"
		Call Echo "%%~ni_%%Ext:~1%%"
		Call Echo "%%~ni %%Ext:~1%%"
Echo.
	)
Exit /B
Цитата shadowbat:
у меня консольное окно на секунду появляется и сразу закрывается, папки не создаются »
Исправил неточность, должно быть ("%CD%\*.txt")

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 24-09-2019 в 14:24.

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:15, 24-09-2019 | #11



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

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


Старожил


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

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


____

Отправлено: 14:26, 24-09-2019 | #12


Ветеран


Contributor


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

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


Цитата shadowbat:
в том сообщении был акцент на Ext2, чтобы полное изменённое имя загнать в отдельную переменную »
Вам надо ехать или шашечки? На фиг эта переменная, если результат достигается и без нее? А если хочется переменную, то используйте вариант с процедурой, который я Вам тоже предложил.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 14:33, 24-09-2019 | #13


Старожил


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

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


Цитата megaloman:
первый код»
тоже прекрасный код в одну строку

Цитата megaloman:
еще как работает, если говорить об эхо »
а как гуглить такую магию?
Код: Выделить весь код
"%%~ni-%%Ext:~1%%"
":~1" это обрезка какая-то ? как её нагуглить?

Цитата megaloman:
Вам надо ехать или шашечки? На фиг эта переменная, если результат достигается и без нее? »
мне для справки, просто чтобы знать, что такой код нельзя загнать в переменную и можно только в таком виде использовать, так сказать "только в прямом эфире"

Отправлено: 14:45, 24-09-2019 | #14


Ветеран


Contributor


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

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


Ежели всё-таки надо не копировать файл, а переместить, то, сохраняя имя папки такое же, как у файла (с точкой в расширении)
Код: Выделить весь код
@Echo Off
	For %%i in ("%CD%\*.txt") Do (
		>nul Move /Y "%%i" "%%i~~~"
		>nul 2>&1 Md "%%i"  
		>nul Move "%%i~~~" "%%i\%%~nxi"
	)
Exit /B

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:48, 24-09-2019 | #15


Ветеран


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

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


Цитата megaloman:
Если банально скопировать, при этом и файл и каталог в одной папке, то каталог не создастся. »
Само собой.

Отправлено: 14:53, 24-09-2019 | #16


Ветеран


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

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


Цитата shadowbat:
а как гуглить такую магию? »
Честно? Никак. Не приспособлены поисковые системы для такого. Причём суть тут именно в полном выражении:
Код: Выделить весь код
Call Echo "%%~ni-%%Ext:~1%%"
— без call смысл теряется.

Цитата shadowbat:
":~1" это обрезка какая-то ? как её нагуглить? »
Цитата set /?:
Код: Выделить весь код
Подстановка переменной среды может быть расширена следующим образом:

    %PATH:str1=str2%

расширит действие переменной среды PATH, заменяя каждое вхождение "str1" в
расширенном результате на "str2".  "str2" может быть пустой строкой для
эффективного удаления вхождений "str1" из расширенного вывода. "str1" может
начинаться со звездочки, и в этом случае это будет соответствовать любому
началу расширенного вывода до первого вхождения оставшейся части "str1".


Можно также использовать строки расширения.

    %PATH:~10,5%

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

    %PATH:~-10%

извлечет последние 10 символов переменной PATH.

    %PATH:~0,-2%

извлечет все символы переменной PATH, за исключением 2-х последних.
А так… Рекомендую загрузить Download Windows Command Reference from Official Microsoft Download Center, пройтись по живым ссылкам из этой темы: CMD/BAT: Коллекция ссылок — CMD/BAT — Коллекция скриптов и идей — Серый форум (обе части «Уроков bat-аники» — обязательно, Rob van der Woude, Timo Salmi и ss64.com — тоже обязательно), пройтись по всем …цати частям тем Командная строка, батники, сценарии (bat, cmd) - [1] :: Программы :: Компьютерный форум Ru.Board (всего 5 частей) и Задачи на bat-файлах - [1] :: Microsoft Windows :: Компьютерный форум Ru.Board (12 частей).
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:39, 24-09-2019 | #17


Старожил


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

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


Iska, благодарю за расширенный комментарий

Отправлено: 17:05, 24-09-2019 | #18


Ветеран


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

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


Цитата shadowbat:
копирует в \file-txt\file-txt\file.txt
т.е. дублирует одну папку »
ничего подобного
до запуска
после запуска
плюс лог в подтверждение:
Скрытый текст

Код: Выделить весь код
-------------------------------------
24.09.2019-17:50:05,57
copy "file111.txt" "file111-txt\file111 txt"
Скопировано файлов:         1.
-------------------------------------
-------------------------------------
24.09.2019-17:50:05,57
copy "fileAAA.txt" "fileAAA-txt\fileAAA txt"
Скопировано файлов:         1.
-------------------------------------
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:54, 24-09-2019 | #19


Старожил


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

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


Цитата alpap:
ничего подобного »
произошло недопонимание, в том конкретном случае надо было положить файл file.txt в \file-txt\file.txt либо в \file txt\file.txt , этот код делает \file-txt\file txt\file.txt, т.е. две папки вместо любой одной

да, я неверно написал, что дублирует, технически папки с разными именами

Отправлено: 18:20, 24-09-2019 | #20



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - [решено] Как убрать ASCII-символ из файла? glukin Скриптовые языки администрирования Windows 8 24-03-2017 10:23
CMD/BAT - Убрать пробелы из файла magistor.88 Скриптовые языки администрирования Windows 2 16-03-2015 17:30
CMD/BAT - [решено] Как из имени файла убрать 11 символов cdp75 Скриптовые языки администрирования Windows 3 26-04-2012 06:07
CMD/BAT - Обработать два текстовых файла в одном цикле: как? grinsen Скриптовые языки администрирования Windows 1 27-02-2010 03:33
Мультимедиа - Как убрать лицензию из WMV-файла? Guest Программное обеспечение Windows 34 26-07-2008 18:47




 
Переход