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

Компьютерный форум 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

 

Ветеран


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

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


Код: Выделить весь код
dir /b "*-txt" "* txt"
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:13, 22-09-2019 | #2



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

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


Забанен


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

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


Силами cmd:
Код: Выделить весь код
cmd /v/c "for %%i in ("%cd%\*.txt") do @(set "n=%%~ni" & set "x=%%~xi" & echo:!n! !x:.=!)"
Силами cmd+sed:
Код: Выделить весь код
dir /b *.txt | sed "s/\./ /g"
Силами pwsh:
Код: Выделить весь код
(gci *.txt).Name -replace '\.', ' '
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:29, 22-09-2019 | #3


Ветеран


Contributor


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

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


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

:NewName
	Set "NN=%~2-%~3"
	Echo %NN%
Exit /B 0
убрать точку в цикле из разрешсширения файла

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


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

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

Отправлено: 14:52, 23-09-2019 | #4


Старожил


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

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


Цитата alpap:
dir /b "*-txt" "* txt" »
не понял
имеется ввиду так?
Код: Выделить весь код
for %%i in ("%CD%\*.txt") do ( 
dir /b "*-txt"
dir /b "* txt"
)
pause

Цитата greg zakharov:
Код: Выделить весь код
cmd /v/c "for %%i in ("%cd%\*.txt") do @(set "n=%%~ni" & set "x=%%~xi" & echo:!n! !x:.=!)"
не заводится
переменные !n! !x:.=! как раз и работают только в случае с EnableDelayedExpansion, нет? аналогичный этому код как раз и показан в первом посте
окно выдаёт:
Скрытый текст
Код: Выделить весь код
D:\111>for %i in ("D:\111\*.txt") do (cmd /v/c "for %i in ("D:\111\*.txt") do @(set "n=%~ni" & set "x=%~xi" & echo:!n! !x:.=!)" )

D:\111>(cmd /v/c "for D:\111\log 2.txt in ("D:\111\*.txt") do @(set "n=log 2" & set "x=.txt" & echo:!n! !x:.=!)" )
Непредвиденное появление: D:\111\log.

D:\111>(cmd /v/c "for D:\111\log.txt in ("D:\111\*.txt") do @(set "n=log" & set "x=.txt" & echo:!n! !x:.=!)" )
Непредвиденное появление: D:\111\log.txt.

D:\111>pause
Для продолжения нажмите любую клавишу . . .


Цитата megaloman:
@Echo Off
For %%i in ("%CD%\*.txt") Do (
Set "Ext=%%~xi"
Call Echo "%%~ni-%%Ext:~1%%"
)
Exit /B
хм, а так не работает:
Код: Выделить весь код
@Echo Off
	For %%i in ("%CD%\*.txt") Do (
		Set "Ext=%%~xi"
		Call Echo "%%~ni-%%Ext:~1%%"
		Set Ext2="%%~ni_%%Ext:~1%%"
		Call Echo %Ext2%
	)
pause
Exit /B
Цитата:
А зачем это нужно, имхо в цикле Вы с этими именами что-то делать хотите, а не наслаждаться их видом в Echo ...
да банально скопировать файл file.txt в \file-txt\file.txt чтобы лишний раз не дублировать точку в имени папки. а %%~xi выдаёт значение с точкой а без точки не выдаёт

Цитата:
из разрешсширения файла
благодарю, поменял

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


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


Ветеран


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

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


Цитата shadowbat:
не заводится
переменные !n! !x:.=! как раз и работают только в случае с EnableDelayedExpansion, нет? »
Цитата shadowbat:
окно выдаёт: »
Заводится. Параметр /v интерпретатора команд как раз включает отложенное раскрытие переменных окружения на указанный сеанс его работы:
Цитата cmd.exe /?:
Код: Выделить весь код
…
/V:ON   Разрешение отложенного расширения переменных среды с применением
        символа '!' в качестве разделителя. Например, /V:ON разрешает
        использовать !var! в качестве расширения переменной var во время
        выполнения. Синтаксис var служит для расширения переменных
        при вводе, что приводит к совсем другим результатам внутри
        цикла FOR.
/V:OFF  Запрет отложенного расширения переменных среды.
…
Если Вы планируете как-то компоновать разные коды — делайте это правильно. Исходные коды коллег работают корректно. Либо изначально озвучивайте полное ТЗ:
Цитата shadowbat:
да банально скопировать файл file.txt в file-txt\file.txt чтобы лишний раз не дублировать точку в имени папки. »
P.S. А чем Вам не нравится точка в имени каталога?
Это сообщение посчитали полезным следующие участники:

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


Ветеран


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

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


Цитата shadowbat:
не понял »
ну вы же уже в который раз изменили название темы и соответственно условие задачи, тот код подразумевался под мое понимание первого заголовка.
На данном этапе код уже гораздо обширнее:
Код: Выделить весь код
@echo off
set "d=C:\Papka"

pushd "%d%"
 for /f "delims=" %%a in ('dir /a-d/b "*.txt"') do set "ext=%%~xa"& call :# "%%a" "%%~na" "%%ext:.=%%"
popd
pause& exit

:#
 if not exist "%~2-%~3\%~2 %~3" md "%~2-%~3\%~2 %~3"
 >nul copy "%~1" "%~2-%~3\%~2 %~3"
exit /b
Это сообщение посчитали полезным следующие участники:

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


Старожил


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

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


Цитата Iska:
Исходные коды коллег работают корректно. »
подтверждаю, работает, я неправильно вставил код

да банально скопировать файл file.txt в file-txt\file.txt чтобы лишний раз не дублировать точку в имени папки.
вот что получилось:
Код: Выделить весь код
cmd /v/c "for %%i in ("%cd%\*.txt") do @( echo %%i & set "n=%%~ni" & set "x=%%~xi" & set "new=!n!!x:.=-!" & md "%%~dpi\!new!\" & copy "%%i" "%%~dpi\!new!\%%~nxi")"
pause
Цитата:
А чем Вам не нравится точка в имени каталога?
сама точка всем нравится, а дублирование имени файла с расширением как то не хочется лишний раз

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


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


Ветеран


Contributor


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

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


Цитата shadowbat:
банально скопировать файл file.txt в file-txt\file.txt »
или
Код: Выделить весь код
@Echo Off
	For %%i in ("%CD%\*.txt") Do (
		Set "Ext=%%~xi"
		>nul Call Xcopy /D /Y "%%i" "%%~dpi%%~ni-%%Ext:~1%%\"
	)
Exit /B
или
Код: Выделить весь код
@Echo Off
	For %%i in ("%CD%\*.txt") Do Set "Ext=%%~xi" &Call :NewName "%%i" "%%~ni" "%%Ext:~1%%" 
Exit /B

:NewName
	>nul Xcopy /D /Y %1 "%~dp1%~2-%~3\"
Exit /B 0
Цитата Iska:
А чем Вам не нравится точка в имени каталога »
Если банально скопировать, при этом и файл и каталог в одной папке, то каталог не создастся. В этом случае надо как-то выкручиваться.

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


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

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

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


Старожил


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

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


Цитата alpap:
На данном этапе код уже гораздо обширнее: »
копирует в \file-txt\file-txt\file.txt
т.е. дублирует одну папку

Цитата alpap:
ну вы же уже в который раз изменили название темы и соответственно условие задачи, тот код подразумевался под мое понимание первого заголовка. »
менял название темы один раз с разрешения на расширение, в течение первого часа немного менял код первого поста после фразы "этот код работает только с setlocal EnableDelayedExpansion", потому что он был на тот момент с ошибкой, задачу и текст до "этот код работает только с setlocal EnableDelayedExpansion" не менял
прошу прощения, если доставил неудобства этим
а по поводу копирования в новую папку, это не новое название темы и не новое ТЗ, это я уже сам внедрю себе, тут именно задача была в этих отложенных переменных и костыле EnableDelayedExpansion

Цитата megaloman:
2 кода
»
оба кода работают

да это и не надо было по ТЗ, согласен, надо было сразу создавать тему именно с копированием в папку file-txt

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


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



Компьютерный форум 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




 
Переход