2017-11-25 567 views
1

我正在編寫一個批處理文件,它需要一些更多的文件。但是他們的文件應該只能使用另一個批處理文件中的調用函數運行。我的代碼如下所示:如何從批處理文件中調用批處理文件?

call compileData.bat 
pause 

我想compilerData.bat剛開始時它是從這個叫,如果沒有它只是從資源管理器或其他的東西開始。

你能幫我嗎?

我試圖在一個小時內就此問題找到解決方案!

+0

爲什麼你想compileData.bat只能從你的腳本運行?是否依賴於環境變量,如果沒有腳本,可能無法正確設置? – jwdonahue

回答

1

您可以使用參數。

compileData.bat:

if "%1" neq "somestring" exit /b 
REM rest of your code 

Another.bat:

call compileData.bat somestring 
pause 
0

我想不出任何辦法將阻止調用的腳本的裸 「運行」。可能這隻能使用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..." 
-1

坐落在父腳本的環境變量,然後如果這變量沒有設置,或者在孩子中沒有正確的值,他們只是退出並顯示一條錯誤消息,說明他們不適合獨立使用。你確實無法阻止某人對代碼進行反向工程並迫使其運行。

你可以把孩子放在一個受密碼保護的zip文件中,讓父母在打電話前解開它。然後,當父項完成時,它將刪除解壓後的腳本。

完成以上所有操作。

+0

爲什麼選擇投票? – jwdonahue

0

您可以使用不太知名的系統變量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.batparent.bat稱爲變量的值是主叫parent.bat的。

C:\WINDOWS\system32\cmd.exe /c ""C:\Batch\CALL\parent.bat" " 
+0

這就是我所記得的,但在這兩種情況下,我的Win10都給了我''C:\ WINDOWS \ system32 \ cmd.exe「。 (當我從命令提示符啓動它們時) – Stephan

+0

@Squashman,看起來你的解決方案只有在腳本從資源管理器啓動時纔有效。它不能在Win10上從命令行運行。 – jwdonahue

0

我的建議是將所有的批處理代碼放入一個批處理文件並使用子程序。打開命令提示符窗口並運行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/輸出一個空行。