我正在編寫一個批處理文件,它需要一些更多的文件。但是他們的文件應該只能使用另一個批處理文件中的調用函數運行。我的代碼如下所示:如何從批處理文件中調用批處理文件?
call compileData.bat
pause
我想compilerData.bat
剛開始時它是從這個叫,如果沒有它只是從資源管理器或其他的東西開始。
你能幫我嗎?
我試圖在一個小時內就此問題找到解決方案!
我正在編寫一個批處理文件,它需要一些更多的文件。但是他們的文件應該只能使用另一個批處理文件中的調用函數運行。我的代碼如下所示:如何從批處理文件中調用批處理文件?
call compileData.bat
pause
我想compilerData.bat
剛開始時它是從這個叫,如果沒有它只是從資源管理器或其他的東西開始。
你能幫我嗎?
我試圖在一個小時內就此問題找到解決方案!
您可以使用參數。
compileData.bat:
if "%1" neq "somestring" exit /b
REM rest of your code
Another.bat:
call compileData.bat somestring
pause
我想不出任何辦法將阻止調用的腳本的裸 「運行」。可能這隻能使用NTFS權限來完成。
可以迅速做的是這樣的:
MOTHERBATCH.bat
call compileData.bat SomePASSPHRASE
compileData.bat
@echo off
if not "%1"=="SomePASSPHRASE" (
echo "You can not run this script directly, please run MOTHERSCRIPT.bat."
exit /B 1
)
echo "Passphrase is correct, code is executed..."
坐落在父腳本的環境變量,然後如果這變量沒有設置,或者在孩子中沒有正確的值,他們只是退出並顯示一條錯誤消息,說明他們不適合獨立使用。你確實無法阻止某人對代碼進行反向工程並迫使其運行。
你可以把孩子放在一個受密碼保護的zip文件中,讓父母在打電話前解開它。然後,當父項完成時,它將刪除解壓後的腳本。
完成以上所有操作。
爲什麼選擇投票? – jwdonahue
您可以使用不太知名的系統變量cmdcmdline
。
我會爲你解釋一個簡短的用法。
爲簡潔起見,我們將有兩個非常簡單的批處理文件。
Parent.bat
@echo off
call compiledata.bat
而且compiledata.bat
@echo off
echo %cmdcmdline%
pause
當compiledata.bat
是在自己的這個變量的值執行是批處理文件本身。
C:\WINDOWS\system32\cmd.exe /c ""C:\Batch\CALL\compiledata.bat" "
但當compiledata.bat
從parent.bat
稱爲變量的值是主叫parent.bat
的。
C:\WINDOWS\system32\cmd.exe /c ""C:\Batch\CALL\parent.bat" "
我的建議是將所有的批處理代碼放入一個批處理文件並使用子程序。打開命令提示符窗口並運行call /?
以獲取有關如何使用子例程的幫助,這些子例程無非是調用當前批處理文件中嵌入的批處理文件。
一個簡單的例子:
@echo off
echo Running %~f0 %*
call :compileData %*
call :WaitForUser
rem The next line results in exiting processing of this batch file
goto :EOF
:compileData
echo/
echo Running subroutine compileData with the arguments: %*
rem Exit processing subroutine compileData and continue above
rem after the command line calling the subroutine compileData.
goto :EOF
:WaitForUser
echo/
pause
rem Exit processing subroutine WaitForUser and continue above
rem after the command line calling the subroutine WaitForUser.
goto :EOF
又見Where does GOTO :EOF return to?並採取DosTips論壇主題ECHO. FAILS to give text or blank line - Instead use ECHO/看看在解釋使用echo/
輸出一個空行。
爲什麼你想compileData.bat只能從你的腳本運行?是否依賴於環境變量,如果沒有腳本,可能無法正確設置? – jwdonahue