Имя пользователя:
Пароль:
 | Правила  

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

Ответить
Настройки темы
CMD/BAT - [решено] имя каталога в переменную

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


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

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


здравствуйте
подскажите, пожалуйста, как решить задачу:
есть имя каталога, в каталоге c:\temp\folder, который единожды создаётся и у него оно всегда разное. хотелось, чтобы производилось считывание имени каталога и создавалась переменная из этого имени. заранее крайне признателен!

Отправлено: 20:04, 28-09-2018

 

Ветеран


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

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


Цитата man8531:
который единожды создаётся »
Чем создаётся?

Цитата man8531:
в каталоге c:\temp\folder »
И сколько там всего подкаталогов?

Отправлено: 20:24, 28-09-2018 | #2



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

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


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


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

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


Цитата Iska:
Чем создаётся? »
программой. создаётся всего один каталог, больше там вообще ничего нет.

Отправлено: 20:27, 28-09-2018 | #3


Ветеран


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

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


Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set sRootFolder=c:\temp\folder
set sSubFolder=

if exist "%sRootFolder%\." (
	for /f "usebackq delims=" %%i in (
		`2^>nul dir /b /a:d /o:-n "%sRootFolder%\*.*"`
	) do set sSubFolder=%%~i

	if defined sSubFolder (
		echo [!sSubFolder!].
	) else (
		echo Can't find any subfolders in root folder [%sRootFolder%].
		exit /b 2
	)
) else (
	echo Can't find root folder [%sRootFolder%].
	exit /b 1
)

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

Отправлено: 21:12, 28-09-2018 | #4


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


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

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


Iska,
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set sRootFolder=C:\Users\user\AppData\Roaming\Mozilla\Firefox\Profiles
if exist "%sRootFolder%\." (
	for /f "usebackq delims=" %%i in (
		`2^>nul dir /b /a:d /o:-n "%sRootFolder%\*.*"`
	) do set sSubFolder=%%~i
copy "%sRootFolder%\%sSubFolder%\*.*" "D:\Downloads\"
)
echo %sSubFolder%
endlocal
exit /b 0
посмел немного изменить под себя командный файл. получилось так. но он не хочет копировать, вернее - не вставляет переменную %sSubFolder% в конец пути. хотя echo выводит на экран переменную:
Код: Выделить весь код
d:\>profiles.cmd
C:\Users\user\AppData\Roaming\Mozilla\Firefox\Profiles\\*.*
Не удается найти указанный файл.
Скопировано файлов:         0.
p3o9zhrw.default
если использовать xcopy /Y /E , то пишет, что не удалось найти указанный путь.

Последний раз редактировалось man8531, 28-09-2018 в 22:28.


Отправлено: 22:16, 28-09-2018 | #5


Старожил


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

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


нужен !

Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion
set user=%username%
set sRootFolder=C:\Users\%user%\AppData\Roaming\Mozilla\Firefox\Profiles
if exist "%sRootFolder%\." (
	for /f "usebackq delims=" %%i in (
		`2^>nul dir /b /a:d /o:-n "%sRootFolder%\*.*"`
	) do set sSubFolder=%%~i
echo copy "%sRootFolder%\!sSubFolder!\*.*" "c:\temp\"
)
echo %sSubFolder%
endlocal
exit /b 0
дает
Код: Выделить весь код
copy "C:\Users\Serguei\AppData\Roaming\Mozilla\Firefox\Profiles\07p9upxo.default
\*.*" "c:\temp\"

Отправлено: 22:39, 28-09-2018 | #6


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


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

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


Serguei Kouzmine,
не работает этот вариант, он вместе со знаком восклицания имя переменной вставляет, а не саму переменную.

Отправлено: 22:52, 28-09-2018 | #7


Старожил


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

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


у вас где то опечатка - я вставил рабочий код

если хоите хелп про ! (disable delayed environment variable
expansion
https://stackoverflow.com/questions/...hat-does-it-do
Using !var! in place of %var% accesses the changed value of var.

Отправлено: 00:31, 29-09-2018 | #8


Ветеран


Contributor


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

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


man8531, Не надо восклицаний и сетлокалов
Код: Выделить весь код
@Echo Off
cls

Set "sRootFolder=C:\Users\user\AppData\Roaming\Mozilla\Firefox\Profiles"
Set "sOutFolder=D:\Downloads"

If Not Exist "%sOutFolder%\" (Echo Can't find folder "%sOutFolder%" &Pause &Exit /B 1)

Set "sSubFolder="
FOR /F "usebackq delims=" %%d IN (`Dir "%sRootFolder%\" /A:D /B /O:D /T:W 2^>nul`) DO Set "sSubFolder=%sRootFolder%\%%d"
If "%sSubFolder%"=="" (Echo Can't find subfolders in folder "%sRootFolder%" &Pause &Exit /B 2)

Echo XCopy /Y /E "%sSubFolder%\*.*" "%sOutFolder%\"
XCopy /Y /E "%sSubFolder%\*.*" "%sOutFolder%\" ||Exit /B 3

pause
Exit /B 0
Если батник исполняется для активного пользователя, то лучше применить
Код: Выделить весь код
Set "sRootFolder=%APPDATA%\Mozilla\Firefox\Profiles"

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

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

Отправлено: 02:15, 29-09-2018 | #9


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


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

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


megaloman,
всё как нужно, спасибо!

Отправлено: 06:30, 29-09-2018 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Узнать имя пользователя и записать в переменную Darkar25 Скриптовые языки администрирования Windows 37 13-01-2018 23:59
CMD/BAT - [решено] Имя в переменную и запуск приложения для разных файлов в папке Sta1917 Скриптовые языки администрирования Windows 10 18-08-2016 17:58
CMD/BAT - [решено] Имя домена компьютера в переменную qwer8383 Скриптовые языки администрирования Windows 3 21-08-2015 11:16
Любой язык - [решено] ВВести имя файла в переменную. Димончик555 Скриптовые языки администрирования Windows 6 10-03-2014 19:36
CMD/BAT - [решено] Найти в реестре параметр и записать в переменную имя ветки в которой он находится root221 Скриптовые языки администрирования Windows 11 25-11-2012 07:54




 
Переход