Показать полную графическую версию : [решено] имя каталога в переменную
здравствуйте
подскажите, пожалуйста, как решить задачу:
есть имя каталога, в каталоге c:\temp\folder, который единожды создаётся и у него оно всегда разное. хотелось, чтобы производилось считывание имени каталога и создавалась переменная из этого имени. заранее крайне признателен!
который единожды создаётся »
Чем создаётся?
в каталоге c:\temp\folder »
И сколько там всего подкаталогов?
Чем создаётся? »
программой. создаётся всего один каталог, больше там вообще ничего нет.
@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
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 , то пишет, что не удалось найти указанный путь.
Serguei Kouzmine
28-09-2018, 22:39
нужен !
@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\"
Serguei Kouzmine,
не работает этот вариант, он вместе со знаком восклицания имя переменной вставляет, а не саму переменную.
Serguei Kouzmine
29-09-2018, 00:31
у вас где то опечатка - я вставил рабочий код
если хоите хелп про ! (disable delayed environment variable
expansion
https://stackoverflow.com/questions/22278456/enable-and-disable-delayed-expansion-what-does-it-do
Using !var! in place of %var% accesses the changed value of var.
megaloman
29-09-2018, 02:15
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"
megaloman,
всё как нужно, спасибо!
man8531, для сведения — Ваше:
создаётся всего один каталог, больше там вообще ничего нет. »
в корне неверно: в каталоге %APPDATA%\Mozilla\Firefox\Profiles может быть куда больше, нежели, чем один подкаталог. И правильным будет не искать какие-то невнятные подкаталоги, а открывать ini-файл %APPDATA%\Mozilla\Firefox\profiles.ini, читать его содержимое, выбирать раздел с параметром Default равным 1, проверять в этом разделе параметр IsRelative и, учитывая его значение, получать полный путь к профилю из параметра Path.
Iska,
согласен, это верно, если исходить из того, что там лежит много профилей. но Вы не полностью видите всю картину просто: там будет только один каталог с уникальным именем, тк командный файл будет отрабатываться на "чистой" машине после клона. то есть, после клона, в папке с уникальным именем, будет происходить полная чистка и последующее копирование эталонного профиля с предустановленными расширениями и закладками. этот командный файл - частичка большого командного файла, который производит установку необходимого софта после клона пк. плюс, в дальнейшем этот батник пригодится для других похожих целей, а в случае с ini, он бы уже не пригодился нигде, кроме как в этой ситуации.
но Вы не полностью видите всю картину просто: »
Что мешало Вам изначально изложить задачу вместо изложения выбранного решения?
в дальнейшем этот батник пригодится для других похожих целей »
И Вы можете сходу назвать пару-тройку аналогичных задач?
плюс, в дальнейшем этот батник пригодится для других похожих целей, а в случае с ini, он бы уже не пригодился нигде, кроме как в этой ситуации. »
А ни «этот батник», ни вообще «батник» для работы с profiles.ini в принципе не годятся, потому как его кодировка — UTF-8 без BOM.
В любом случае, как поступать — дело Ваше. Я Вам изложил — как поступать правильно.
Что мешало Вам изначально изложить задачу вместо изложения выбранного решения? »
не хотел забивать помогающему голову лишней информацией. нужно было просто заставить батник создавать переменную из уникального имени каталога, а дальше я уже сам допилю его под свои нужды.
И Вы можете сходу назвать пару-тройку аналогичных задач? »
такая же манипуляция с профилем Thunderbird, например.
такая же манипуляция с профилем Thunderbird, например. »
И…? Pale Moon, WaterFox, SeaMonkey и т.п. Так и я могу ;), всё это базируется на одном и том же принципе. Но суть в том, что изложенное мною будет работать и для:
такая же манипуляция с профилем Thunderbird, например »
и для Pale Moon, и для WaterFox, и для SeaMonkey, и для любых прочих продуктов, базирующихся на коде от Mozilla Foundation. И получается, что Ваше «нигде»:
он бы уже не пригодился нигде, кроме как в этой ситуации. »
пока совсем не в тему. Понимаете, о чём я?
Iska,
говорить можно долго о недосказонностях или некорректных сказанностях, но главное - что результат достигнут. спасибо за оказанную помощь
но главное - что результат достигнут. »
Не могу с Вами тут согласиться, коллега. Главное — что мы друг друга поняли ;).
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.