我正在编写一个批处理文件,它需要一些更多的文件。但是他们的文件应该只能使用另一个批处理文件中的调用函数运行。我的代码如下所示:如何从批处理文件中调用批处理文件?
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