如果批处理文件是从另一个批处理文件调用的,那么如何才能处理批处理文件?

时间:2017-11-25 20:05:27

标签: batch-file

我正在编写批处理文件,它需要更多文件。但是他们的文件应该只能使用另一个批处理文件中的调用函数运行。我的代码如下所示:

call compileData.bat
pause

我希望compilerData.bat只是从这个调用时启动,而不是从资源管理器或其他东西启动它。

你能帮帮我吗?

我试图在一个小时内找到解决这个问题的方法!

4 个答案:

答案 0 :(得分:1)

您可以使用参数。

compileData.bat:

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

Another.bat:

call compileData.bat somestring
pause

答案 1 :(得分: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..."

答案 2 :(得分:0)

您可以使用名为cmdcmdline的不太知名的系统变量。

我将为您解释一个简短的用法。

为了简洁起见,我们将有两个非常简单的批处理文件。

Parent.bat

@echo off
call compiledata.bat

并且编译了.ata.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" "

答案 3 :(得分:-1)

在父脚本中设置环境变量,如果未设置该变量或子项中没有正确的值,则只需退出并显示错误消息,说明它们不适合独立使用。你实在无法阻止某人对代码进行逆向工程并强制它运行。

您可以将孩子放在受密码保护的zip文件中,让父母在调用它们之前将其解压缩。然后当父完成时,它会删除解压缩的脚本。

完成上述所有操作。