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

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

Ответить
Настройки темы
CMD/BAT - [решено] Нужны 3 куска кода, которые можно было применять в разным местах в 1-ом BAT-файле.

Аватара для KOD65001

Новый участник


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

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


Нужны 3 куска кода, которые можно было применять в разным местах в 1-ом BAT-файле.

Есть код BAT:

set /p param=<"4455.txt" - ЧИТАЕТ ПЕРВУЮ СТРОКУ В TXT-файле

echo %param% | msg * - ВЫВОД ЗНАЧЕНИЯ ПЕРЕМЕННОЙ "param"

Задача:

1) Вместо СТРОКИ нужно СОХРАНИТЬ В ПЕРЕМЕННУЮ "param" ИМЯ TXT-файла
(чтобы во время выполнения bat выводилось "4455" - это имя только для примера)
P.S. ВАЖНО чтобы в переменной сохранялись и выводились не только цифры,
но и русские, английские буквы, символы Sv!F^@&$...например имя "СпаСиБо!SvF^@&$"
так как имя файла может быть всегда разным!

2) Переименовать этот TXT-файл в "12345.txt"

3) Вернуть обратно имя TXT-файла (переименовать с 12345.txt на "4455.txt")
используя переменную "param"

Нужно сделать эти действия в BAT-файле!
Понимаю, что есть другие способы сделать те же действия, но хотел бы использовать только код BAT,
поэтому PowerShell или дополнительные утилиты, программы для BAT-файла нежелательны

Отправлено: 17:23, 01-07-2020

 

Ветеран


Contributor


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

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


KOD65001, Не понятно:
1. СОХРАНИТЬ В ПЕРЕМЕННУЮ "param" ИМЯ TXT-файла - откуда его брать? так как имя файла может быть всегда разным!
2. Переименовать этот TXT-файл в "12345.txt" - именно в это имя, или его тоже надо откуда-то взять?
Код: Выделить весь код
@Echo Off
cls
	Set "param=СпаСиБо!SvF^@&$.txt"
				dir "%param%"
				pause
	msg * "%param%"
	Ren "%param%" "12345.txt"
				dir "12345.txt"
				pause
	Ren "12345.txt" "%param%"
				dir "%param%"
pause
Exit /B

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

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

Отправлено: 18:18, 01-07-2020 | #2



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

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


Аватара для KOD65001

Новый участник


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

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


Спасибо megaloman! Прошу прощения за то что сразу не написал, необходимо чтобы имя бралось не только у текстового файла, а у любого типа файла и с разным расширением. Имя файла берется из пути C:\1\111\*.* В код который написали я добавил еще и кодировку и все стало нормально отображаться. Только как сделать чтобы в переменную "param" бралось имя любого типа файла лежащего в пути C:\1\111\*.* ?


@Echo Off
cls
chcp 1251
Set "param=СпаСиБо!SvF^@&$.txt"
chcp 866 >NUL
chcp 1251
dir "%param%"
chcp 866 >NUL
pause
chcp 1251 >NUL
msg * "%param%"
chcp 866 >NUL

pause
chcp 1251 >NUL
Ren "%param%" "12345.txt"
chcp 866 >NUL
chcp 1251 >NUL
dir "12345.txt"
chcp 866 >NUL
pause

chcp 1251 >NUL
Ren "12345.txt" "%param%"
chcp 866 >NUL

chcp 1251 >NUL
dir "%param%"
chcp 866 >NUL
pause
Exit /B

Цитата megaloman:
"12345.txt" - именно в это имя, или его тоже надо откуда-то взять? »
в вашем коде который выше, все работает как надо! просто переименовываем его в "12345", мы нигде не берем. В вашем коде все правильно)

Отправлено: 21:44, 01-07-2020 | #3


Аватара для KOD65001

Новый участник


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

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


простите меня плохо объяснять умею...

Основные действия:

1. Автоматическое определение имени и расширения файла лежащего в C:\1\111\*.* и присваивание имени файла в переменную "param" (без необходимости изменять в ручную имя и расширение)

2. Просто переименовываем файл лежащий в C:\1\111\*.* в имя "12345" без изменения расширения у файла. "12345" - нигде не берется, просто переименовываем

3. Вернуть обратно имя файлу, которое было в самом начале

Отправлено: 22:29, 01-07-2020 | #4


Ветеран


Contributor


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

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


KOD65001, Не понимаю, зачем нужна именно переменная %param%. Чтобы автоматически определить имена+расширение файлов в папке придётся использовать For с последующими трудностями работы с этой переменной.
Пример с %param%
Код: Выделить весь код
@Echo Off
cls
	Set "BoxIn=Z:\Soft_In"
	Set "Mask=*.*"
	Set "NewName=12345"

	FOR /F "usebackq delims=" %%f IN (`2^>nul Dir "%BoxIn%\%Mask%" /B /A:-D`) DO (
		Set "param=%%f"
		Call msg * "%%param%%"
							Echo 1 ----------------
							Call Dir "%BoxIn%\%%param%%"
							Pause
		Call Ren "%BoxIn%\%%param%%" "%NewName%%%~xf"
							Echo 2 ----------------
							Dir "%BoxIn%\%NewName%%%~xf"
							Pause
		Call Ren "%BoxIn%\%NewName%%%~xf" "%%param%%""
							Echo 3 ----------------
							Call Dir "%BoxIn%\%%param%%"
							Pause
	)
Exit /B
Гораздо проще непосредственно использовать переменную цикла
Код: Выделить весь код
@Echo Off
cls
	Set "BoxIn=Z:\Soft_In"
	Set "Mask=*.*"
	Set "NewName=12345"

	FOR /F "usebackq delims=" %%f IN (`2^>nul Dir "%BoxIn%\%Mask%" /B /A:-D`) DO (
		msg * "%%f"
							Echo 1 ----------------
							Dir "%BoxIn%\%%f"
							Pause
		Ren "%BoxIn%\%%f" "%NewName%%%~xf"
							Echo 2 ----------------
							Dir "%BoxIn%\%NewName%%%~xf"
							Pause
		Ren "%BoxIn%\%NewName%%%~xf" "%%f"
							Echo 3 ----------------
							Dir "%BoxIn%\%%f"
							Pause
	)
Exit /B
И, кстати, зачем постоянно дергать chcp, сохраните батник в 866 кодировке и больше его не дергайте.

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

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

Отправлено: 23:30, 01-07-2020 | #5


Аватара для KOD65001

Новый участник


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

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


megaloman огромное спасибо! переменная %param% была нужна для того, чтобы передать ее значения в vbs скрипт. Как и сказали переменную цикла действительно лучше использовать. Наверно это уже не по теме, но хотел спросить. А как в VBS файле прописать путь до текстового файла "ca.txt" который будет лежать в папке "Temp" независимо где находится сама папка "Temp" у пользователя т.е. чтобы эта папка определялась автоматически как у bat..типа такого: %TEMP%\ca.txt Тоже самое надо как то прописать %TEMP% и в vbs но не знаю как. На данный момент в VBS скрипте стоит "КОНКРЕТНЫЙ ПУТЬ"...

Вот это:

objStream.LoadFromFile("C:\Users\User\AppData\Local\Temp\ca.txt")

У пользователя эта папка может быть в любом другом месте, например "C:\Temp\". В BAT для этого нужно поставить %TEMP%\ , а в VBS как?

Отправлено: 00:08, 03-07-2020 | #6


Ветеран


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

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


KOD65001, вообще-то, здесь, как и на многих других форумах, принято правило «Одна проблема — одна тема», а не «Один пользователь — одна тема».
Это сообщение посчитали полезным следующие участники:

Отправлено: 01:07, 03-07-2020 | #7


Ветеран


Contributor


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

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


Код: Выделить весь код
Set WSE = CreateObject("WScript.Shell").Environment
FName = WSE("Temp")

FName = CreateObject("WScript.Shell").ExpandEnvironmentStrings("%Temp%")
MsgBox FName

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


Последний раз редактировалось megaloman, 03-07-2020 в 19:48. Причина: Исправил после поста Iska

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

Отправлено: 16:00, 03-07-2020 | #8


Ветеран


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

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



Цитата KOD65001:
В BAT для этого нужно поставить %TEMP% »
как и %TMP% в bat это: "C:\Users\User\AppData\Local\Temp"
там нет простой возможности поменять ее расположение
если
Цитата KOD65001:
У пользователя эта папка может быть в любом другом месте, например "C:\Temp\" »
то именно абсолютный путь, тем более папок "Temp" не одна по компьютеру не считая и созданные в любом месте.
например у меня их:
1.jpg
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:09, 03-07-2020 | #9


Ветеран


Contributor


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

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


Iska, KOD65001, Исправил предыдущий пост, спасибо Iska

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


Отправлено: 19:49, 03-07-2020 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Можно ли с помощю (.bat) кода узнать MD5 файла? turbolover Скриптовые языки администрирования Windows 19 18-10-2018 19:30
Доступ - Возможно ли объединить в домашнюю сеть пк которые подключены к разным роутерам? Михайло Сетевые технологии 21 31-05-2017 12:32
CMD/BAT - [решено] сохранение параметра в config.cfg и потом чтоб его можно было применять в других бат vlad_exe@vk Скриптовые языки администрирования Windows 6 02-04-2016 18:49
CMD/BAT - [решено] Можно ли с помощью (.bat) кода узнать серийный номер материнской платы компьютера turbolover Скриптовые языки администрирования Windows 12 29-07-2015 16:47
CMD/BAT - [решено] Как сдедать выполнение команды только после выполнения куска кода? Ingolder Скриптовые языки администрирования Windows 8 01-09-2010 22:52




 
Переход