Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Записать имя папки в которой лежит батник в переменную а потом эту же папку переим. (http://forum.oszone.net/showthread.php?t=143338)

bobr95 23-06-2009 20:48 1150155

Записать имя папки в которой лежит батник в переменную а потом эту же папку переим.
 
Здравствуйте! Я в batниках хорошо не разбираюсь и поэтому у меня возникла проблема требующяя решения. Нужно чтобы батник записал имя той папки в которой лежит он сам в переменную. %oldipforsite%. Заранее спасибо

gora 23-06-2009 21:11 1150169

Цитата:

Цитата bobr95
Нужно чтобы батник записал имя той папки в которой лежит он сам в переменную. %oldipforsite% »

Попробуйте так:
Код:

@Echo Off
Set oldipforsite=%~dp0
For /D %%a In ("%oldipforsite:~0,-1%.txt") Do Set oldipforsite=%%~na

Echo %oldipforsite%
Pause>nul
Exit

Цитата:

Цитата bobr95
а потом эту же папку переим. »

А вот переименовать папку из батника, запущенного из этой папки, не позволит система.

bobr95 23-06-2009 21:15 1150172

А можно эту переменную передать в другой батник и из него переименовать?

gora 23-06-2009 21:56 1150193

Цитата:

Цитата bobr95
А можно эту переменную передать в другой батник и из него переименовать? »

Можно попробовать так:
Код:

@Echo Off
:: Задача1 - получение в переменную имени папки
Set oldipforsite=%~dp0
For /D %%a In ("%oldipforsite:~0,-1%.txt") Do Set oldipforsite=%%~na

:: Задача2 - переименование папки
Set NewFolder=Folder123
CD ..
REN %~dp0 %NewFolder%
Exit

Только вот переменная oldipforsite здесь не требуется, т.к., она содержит только имя папки, а передавать нужно полный путь к этой папке и ухищрения по выделению имени папки не нужны.

bobr95 23-06-2009 22:29 1150222

Пасибо, робает. Теперь допишу койче, скомпилирую в ехе и отправлю в автозагрузку!

white155 12-10-2011 12:36 1771686

Всё очень просто, в самом начале программы надо написать
@set oldipforsite=%cd%
@echo %oldipforsite%
@pause

Iska 12-10-2011 15:22 1771822

white155, Ваш код ошибочен, ибо переменная окружения «CD» содержит текущий путь на текущем диске, а не путь к пакетному файлу.

Подсказка
Пакетный файл может запускаться не только двойным щелчком из Проводника, но, прежде всего — указанием пути к пакетному файлу:
Цитата:

Код:

E:\Песочница\0085>0001.cmd
E:\Песочница\0085
Для продолжения нажмите любую клавишу . . .

E:\Песочница>E:\Песочница\0085\0001.cmd
E:\Песочница
Для продолжения нажмите любую клавишу . . .

E:\Песочница>.\0085\0001.cmd
E:\Песочница
Для продолжения нажмите любую клавишу . . .

E:\>E:\Песочница\0085\0001.cmd
E:\
Для продолжения нажмите любую клавишу . . .

D:\>E:\Песочница\0085\0001.cmd
D:\
Для продолжения нажмите любую клавишу . . .

D:\>



SANIOK_AV 10-04-2012 16:30 1897065

Цитата:

Цитата gora
Попробуйте так:
Код:
@Echo Off
Set oldipforsite=%~dp0
For /D %%a In ("%oldipforsite:~0,-1%.txt") Do Set oldipforsite=%%~na
Echo %oldipforsite%
Pause>nul
Exit »

а как работает конструкция %%~na ?

SANIOK_AV 10-04-2012 18:42 1897148

Плюс ещё такой ньюанс:

если текущий каталог у нас "1", то при выполнении сценария
Код:

@Echo Off
Set oldipforsite=%~dp0
For /D %%a In ("%oldipforsite:~0,-1%.txt") Do Set oldipforsite=%%~na
Echo %oldipforsite%
Pause>nul
Echo oldipforsite= %oldipforsite%>1.txt
Exit

содержание файла 1.txt будет таково: oldipforsite=
то есть единичка почему-то не занесётся
:(


Время: 18:55.

Время: 18:55.
© OSzone.net 2001-