PDA

Показать полную графическую версию : [решено] Убрать/Заменить с батника %~dp0


Гена829999
25-09-2021, 17:20
Здравствуйте!
Есть батник, который выдает в текстовом файле ид установки 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
В другой любой папке он не работает »
Что именно означает «не работает»?

Подозреваю строку %~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
Что именно означает «не работает»? »
Ни создается файл IID.txt
А на рабочем столе создается и со всем содержимым

NickM
25-09-2021, 19:02
Гена829999, не пробовали в сценарии включать расширенную обработку команд (https://ab57.ru/cmdlist/setlocal.html)?

NickM
25-09-2021, 19:33
Гена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
Обрамите для начала кавычками все пути »
Благодарю Вас!
Работает как часы!

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

NickM
25-09-2021, 19:43
Благодарю Вас!
Работает как часы! »

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

Iska
25-09-2021, 20:16
в сценарии включать расширенную обработку команд? »
А, кстати — да!

Гена829999
25-09-2021, 20:23
Покажите пжлст. полученный код сценария. »
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
25-09-2021, 21:16
Гена829999, кавычки — само собой. Но и:
setlocal enableextensions enabledelayedexpansion
нужен.

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

Iska
25-09-2021, 22:54
С %~dp0 впервые сталкиваюсь »
call /?

Гена829999
25-09-2021, 23:33
call /? »
Выходит вместо qoto можно и call написать!?
Пример:
ver | find /i "6.1"
if %ERRORLEVEL%==0 call Windows7IID

Iska
26-09-2021, 05:36
Можно.
@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
Можно »
Тоже рабочий вариант!




© OSzone.net 2001-2012