我正在编写批处理文件,它需要更多文件。但是他们的文件应该只能使用另一个批处理文件中的调用函数运行。我的代码如下所示:
call compileData.bat
pause
我希望compilerData.bat
只是从这个调用时启动,而不是从资源管理器或其他东西启动它。
你能帮帮我吗?
我试图在一个小时内找到解决这个问题的方法!
答案 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文件中,让父母在调用它们之前将其解压缩。然后当父完成时,它会删除解压缩的脚本。
完成上述所有操作。