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

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

Гена829999 25-09-2021 17:20 2967491

Убрать/Заменить с батника %~dp0
 
Здравствуйте!
Есть батник, который выдает в текстовом файле ид установки Office
Но проблема в том что, он работает только при запуске на рабочем столе Windows
В другой любой папке он не работает
Подозреваю строку %~dp0 в начале выводимого/создаваемого txt файла %~dp0IID.txt
Что надо еще добавить или убрать, чтоб батник работал в любой другой папке как и на рабочем столе?
Если есть возможность убрать или заменить строку %~dp0, было бы еще лучше!
Батник
@echo off
for /d %%a in (4,5,6) do call :path "%%a"
start %~dp0IID.txt
timeout 2 >nul
del /f %~dp0IID.txt
exit

:path
if exist "C:\Program Files\Microsoft Office\Office1%~1\ospp.vbs" (
cd /d "C:\Program Files\Microsoft Office\Office1%~1" & call :getIID "%~1")
if exist "C:\Program Files (x86)\Microsoft Office\Office1%~1\ospp.vbs" (
cd /d "C:\Program Files (x86)\Microsoft Office\Office1%~1" & call :getIID "%~1")
exit /b

:getIID
for /f "tokens=4-8 delims=:, " %%b in ('cscript //nologo ospp.vbs /dinstID ^| findstr /i "Installation ID"') do (
set ID=%%f
if %~1 EQU 4 (
set ID1=!ID:~0,6!& set ID2=!ID:~6,6!& set ID3=!ID:~12,6!& set ID4=!ID:~18,6!& set ID5=!ID:~24,6!& set ID6=!ID:~30,6!& set ID7=!ID:~36,6!& set ID8=!ID:~42,6!& set ID9=!ID:~48,6!
(echo %%b %%c, %%d & echo.Installation ID: !ID1!-!ID2!-!ID3!-!ID4!-!ID5!-!ID6!-!ID7!-!ID8!-!ID9!&echo.) >>%~dp0IID.txt) else (
set ID1=!ID:~0,7!& set ID2=!ID:~7,7!& set ID3=!ID:~14,7!& set ID4=!ID:~21,7!& set ID5=!ID:~28,7!& set ID6=!ID:~35,7!& set ID7=!ID:~42,7!& set ID8=!ID:~49,7!& set ID9=!ID:~56,7!
(echo %%b %%c, %%d & echo.Installation ID: !ID1!-!ID2!-!ID3!-!ID4!-!ID5!-!ID6!-!ID7!-!ID8!-!ID9!&echo.) >>%~dp0IID.txt)
)
exit /b

Iska 25-09-2021 18:39 2967500

Цитата:

Цитата Гена829999
В другой любой папке он не работает »

Что именно означает «не работает»?

Цитата:

Цитата Гена829999
Подозреваю строку %~dp0 в начале выводимого/создаваемого txt файла %~dp0IID.txt »

Обрамите для начала кавычками все пути. Наподобие:
Скрытый текст
Код:

@echo off
for /d %%a in (4, 5, 6) do call :path "%%a"
start "" "%~dp0IID.txt"
>nul timeout 2
del /f "%~dp0IID.txt"
exit

:path
        if exist "C:\Program Files\Microsoft Office\Office1%~1\ospp.vbs" (
                cd /d "C:\Program Files\Microsoft Office\Office1%~1"
                call :getIID "%~1"
        )
       
        if exist "C:\Program Files (x86)\Microsoft Office\Office1%~1\ospp.vbs" (
                cd /d "C:\Program Files (x86)\Microsoft Office\Office1%~1"
                call :getIID "%~1"
        )
       
        exit /b

:getIID
        for /f "tokens=4-8 delims=:, " %%b in ('cscript //nologo ospp.vbs /dinstID ^| findstr.exe /i "Installation ID"') do (
                set ID=%%f
               
                if %~1 EQU 4 (
                        set ID1=!ID:~0,6!
                        set ID2=!ID:~6,6!
                        set ID3=!ID:~12,6!
                        set ID4=!ID:~18,6!
                        set ID5=!ID:~24,6!
                        set ID6=!ID:~30,6!
                        set ID7=!ID:~36,6!
                        set ID8=!ID:~42,6!
                        set ID9=!ID:~48,6!
                       
                        >>"%~dp0IID.txt" (
                                echo %%b %%c, %%d
                                echo.Installation ID: !ID1!-!ID2!-!ID3!-!ID4!-!ID5!-!ID6!-!ID7!-!ID8!-!ID9!
                                echo.
                        )
                ) else (
                        set ID1=!ID:~0,7!
                        set ID2=!ID:~7,7!
                        set ID3=!ID:~14,7!
                        set ID4=!ID:~21,7!
                        set ID5=!ID:~28,7!
                        set ID6=!ID:~35,7!
                        set ID7=!ID:~42,7!
                        set ID8=!ID:~49,7!
                        set ID9=!ID:~56,7!

                        >>"%~dp0IID.txt" (
                                echo %%b %%c, %%d
                                echo.Installation ID: !ID1!-!ID2!-!ID3!-!ID4!-!ID5!-!ID6!-!ID7!-!ID8!-!ID9!
                                echo.
                        )
                )
        )
        exit /b


Гена829999 25-09-2021 18:49 2967505

Цитата:

Цитата Iska
Что именно означает «не работает»? »

Ни создается файл IID.txt
А на рабочем столе создается и со всем содержимым

NickM 25-09-2021 19:02 2967509

Гена829999, не пробовали в сценарии включать расширенную обработку команд?

NickM 25-09-2021 19:33 2967515

Гена829999, попробуйте так, ниже Ваш код чуть подправленный, при это уверен, что специалисты предложат оптимальный:

Скрытый текст
Код:

@echo off
SETLOCAL EnableDelayedExpansion
set spath=%~dp0
for /d %%a in (4,5,6) do call :path %%a
start notepad "%spath%IID.txt"
timeout 2 >nul
del /f "%spath%IID.txt"
exit

:path
if exist "C:\Program Files\Microsoft Office\Office1%~1\ospp.vbs" (
cd /d "C:\Program Files\Microsoft Office\Office1%~1" & set prmt=%~1 & call :getIID %prmt%)
if exist "C:\Program Files (x86)\Microsoft Office\Office1%~1\ospp.vbs" (
cd /d "C:\Program Files (x86)\Microsoft Office\Office1%~1" & set prmt=%~1 & call :getIID %prmt%)
exit /b

:getIID
for /f "tokens=4-8 delims=:, " %%b in ('cscript //nologo ospp.vbs /dinstID ^| findstr /i "Installation ID"') do (
set ID=%%f
if !prmt! EQU 4 (
set ID1=!ID:~0,6!& set ID2=!ID:~6,6!& set ID3=!ID:~12,6!& set ID4=!ID:~18,6!& set ID5=!ID:~24,6!& set ID6=!ID:~30,6!& set ID7=!ID:~36,6!& set ID8=!ID:~42,6!& set ID9=!ID:~48,6!
(echo %%b %%c, %%d & echo.Installation ID: !ID1!-!ID2!-!ID3!-!ID4!-!ID5!-!ID6!-!ID7!-!ID8!-!ID9!&echo.) >>"%spath%IID.txt") else (
set ID1=!ID:~0,7!& set ID2=!ID:~7,7!& set ID3=!ID:~14,7!& set ID4=!ID:~21,7!& set ID5=!ID:~28,7!& set ID6=!ID:~35,7!& set ID7=!ID:~42,7!& set ID8=!ID:~49,7!& set ID9=!ID:~56,7!
(echo %%b %%c, %%d & echo.Installation ID: !ID1!-!ID2!-!ID3!-!ID4!-!ID5!-!ID6!-!ID7!-!ID8!-!ID9!&echo.) >>"%spath%IID.txt")
)
exit /b


Гена829999 25-09-2021 19:34 2967516

Цитата:

Цитата Iska
Обрамите для начала кавычками все пути »

Благодарю Вас!
Работает как часы!

Цитата:

Цитата NickM
не пробовали в сценарии »

Спасибо, но это не помогало!

NickM 25-09-2021 19:43 2967522

Цитата:

Цитата Гена829999
Благодарю Вас!
Работает как часы! »

Покажите пжлст. полученный код сценария.

Iska 25-09-2021 20:16 2967525

Цитата:

Цитата NickM
в сценарии включать расширенную обработку команд? »

А, кстати — да!

Гена829999 25-09-2021 20:23 2967527

Цитата:

Цитата NickM
Покажите пжлст. полученный код сценария. »

Полученный Код Сценария
for /d %%a in (4,5,6) do call :path "%%a"
start "" "%~dp0IID.txt"
timeout 2 >nul
REM del /f "%~dp0IID.txt"
Exit

:path
if exist "C:\Program Files\Microsoft Office\Office1%~1\ospp.vbs" (
cd /d "C:\Program Files\Microsoft Office\Office1%~1" & call :getIID "%~1")
if exist "C:\Program Files (x86)\Microsoft Office\Office1%~1\ospp.vbs" (
cd /d "C:\Program Files (x86)\Microsoft Office\Office1%~1" & call :getIID "%~1")
Exit /B

:getIID
SetLocal EnableDelayedExpansion
for /f "tokens=4-8 delims=:, " %%b in ('cscript //nologo ospp.vbs /dinstID ^| findstr /i "Installation ID"') do (
set ID=%%f
if %~1 EQU 4 (
set ID1=!ID:~0,6!& set ID2=!ID:~6,6!& set ID3=!ID:~12,6!& set ID4=!ID:~18,6!& set ID5=!ID:~24,6!& set ID6=!ID:~30,6!& set ID7=!ID:~36,6!& set ID8=!ID:~42,6!& set ID9=!ID:~48,6!
(echo Версия: %%b %%c, %%d & echo.IID: !ID1!-!ID2!-!ID3!-!ID4!-!ID5!-!ID6!-!ID7!-!ID8!-!ID9!&echo.) >>"%~dp0IID.txt") else (
set ID1=!ID:~0,7!& set ID2=!ID:~7,7!& set ID3=!ID:~14,7!& set ID4=!ID:~21,7!& set ID5=!ID:~28,7!& set ID6=!ID:~35,7!& set ID7=!ID:~42,7!& set ID8=!ID:~49,7!& set ID9=!ID:~56,7!
(echo Версия: %%b %%c, %%d & echo.IID: !ID1!-!ID2!-!ID3!-!ID4!-!ID5!-!ID6!-!ID7!-!ID8!-!ID9!&echo.) >>"%~dp0IID.txt")
)
Exit /B


Цитата:

Цитата Iska
А, кстати — да! »

Включал, а все ровно не работало
Сработало только после Ваших поправок с кавычками
Благодарю!

Цитата:

Цитата NickM
попробуйте так »

Ваш код тоже работает!
Благодарю!

Iska 25-09-2021 21:16 2967530

Гена829999, кавычки — само собой. Но и:
Код:

setlocal enableextensions enabledelayedexpansion
нужен.

Гена829999 25-09-2021 21:31 2967531

Цитата:

Цитата Iska
нужен »

Нужен конечно!
Было изначально в оригинале, но и с ним не работал в любой папке любого диска
Работал только на рабочем столе
Только после Ваших поправок заработало независимо от местоположения
Видимо проблема в путях папок-в пробелах в пути к ним
Пытался без %~dp0 как и в других батниках,но никак не получалось
С %~dp0 впервые сталкиваюсь

Iska 25-09-2021 22:54 2967532

Цитата:

Цитата Гена829999
С %~dp0 впервые сталкиваюсь »

Код:

call /?

Гена829999 25-09-2021 23:33 2967535

Цитата:

Цитата Iska
call /? »

Выходит вместо qoto можно и call написать!?
Пример:
ver | find /i "6.1"
if %ERRORLEVEL%==0 call Windows7IID

Iska 26-09-2021 05:36 2967540

Можно.
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

ver | find.exe /i "6.1" && call :Windows7IID

endlocal
exit /b 0

:Windows7IID
        rem Some code
        rem Some code
        rem Some code
       
        exit /b


Гена829999 26-09-2021 20:12 2967590

Цитата:

Цитата Iska
Можно »

Тоже рабочий вариант!


Время: 12:48.

Время: 12:48.
© OSzone.net 2001-