来自c++;批处理文件的字符串 我想从C++输入批处理文件变量,但是我搜索了很多帮助也做不到…… system("bin\\data\\locker.bat"); 批处理文件正在请求输入,但如何获取C++的值并插入批处理文件? 我用C++打开这个批处理,但是我不能插入使用C++所需要的密码。 批次:
1:如果进行比较,则应引用来自c++;批处理文件的字符串 我想从C++输入批处理文件变量,但是我搜索了很多帮助也做不到…… system("bin\\data\\locker.bat"); 批处理文件正在请求输入,但如何获取C++的值并插入批处理文件? 我用C++打开这个批处理,但是我不能插入使用C++所需要的密码。 批次:,c++,batch-file,C++,Batch File,1:如果进行比较,则应引用的两个操作数。如果操作数展开为零,则如果未加引号,将导致语法错误 2:您应该使用:eof隐式标签,而不是定义自己的结束标签 3:您应该使用echo.而不是带有空格分隔符的echo。在您的情况下,这在技术上是不必要的,因为您只有文字消息,但是在消息仅由变量扩展组成的情况下,例如echo%msg%,使用echo.%msg%将打印一个空行,而不是echo处于打开状态。,保持一致性很好 4:在运行set/p命令之前,您应该初始化set/p目标变量;否则,剩余值可能会弄乱脚本 5
的两个操作数。如果操作数展开为零,则如果未加引号,将导致语法错误
2:您应该使用:eof
隐式标签,而不是定义自己的结束
标签
3:您应该使用echo.
而不是带有空格分隔符的echo
。在您的情况下,这在技术上是不必要的,因为您只有文字消息,但是在消息仅由变量扩展组成的情况下,例如echo%msg%
,使用echo.%msg%
将打印一个空行,而不是echo处于打开状态。
,保持一致性很好
4:在运行set/p
命令之前,您应该初始化set/p
目标变量;否则,剩余值可能会弄乱脚本
5:我承认这是主观的,但我建议您将脚本的不同部分隔开以提高可读性,而不是将其作为一个完整的代码块
6:您可以通过管道向内部调用set/p
的脚本输入密码,尽管通过管道向批处理脚本输入密码会引起令人不快的安全问题
这就是我重写代码的方式(使用“pass”作为密码):
和C++程序(使用宏存储密码;或者,您可以从文件读取并调用<代码> SpRtff)(/Cord>)生成系统命令字符串,这可能是更好的,因为它可以避免密码在C++源和二进制中的存储:
请举例说明你正在尝试做什么。谢谢你的建议!!然而,即使我的批处理文件成功地在C++中运行,并且能够插入密码,甚至显示“文件夹解锁成功”,我的私有文件仍然没有显示在文件夹中,有什么东西我错过了吗?什么私人文件?您的脚本对文件不做任何操作。我的批处理文件功能是当它运行并插入密码时,它将创建一个私人文件夹。当它再次运行时,它将要求锁定/隐藏文件夹。我可以正常运行时,我手动点击批处理文件,但当使用C++代码运行它,它不提供任何行动…
cls
@ECHO OFF
title Folder Private
if EXIST "HTG Locker" goto UNLOCK
if NOT EXIST Private goto MDLOCKER
:CONFIRM
echo Are you sure you want to lock the folder(Y/N)
set/p "cho=>"
if %cho%==Y goto LOCK
if %cho%==y goto LOCK
if %cho%==n goto END
if %cho%==N goto END
echo Invalid choice.
goto CONFIRM
:LOCK
ren Private "HTG Locker"
attrib +h +s "HTG Locker"
echo Folder locked
goto End
:UNLOCK
echo Enter password to unlock folder
set/p "pass=>"
if NOT %pass%== PASSWORD_GOES_HERE goto FAIL
attrib -h -s "HTG Locker"
ren "HTG Locker" Private
echo Folder Unlocked successfully
goto End
:FAIL
echo Invalid password
goto end
:MDLOCKER
md Private
echo Private created successfully
goto End
:End
cls
@echo off
title Folder Private
if exist "HTG Locker" goto UNLOCK
if not exist Private goto MDLOCKER
:CONFIRM
echo.Are you sure you want to lock the folder(Y/N)
set cho=
set /p "cho=>"
if "%cho%"=="Y" goto LOCK
if "%cho%"=="y" goto LOCK
if "%cho%"=="n" goto :eof
if "%cho%"=="N" goto :eof
echo.Invalid choice.
goto CONFIRM
:LOCK
ren Private "HTG Locker"
attrib +h +s "HTG Locker"
echo.Folder locked
goto :eof
:UNLOCK
echo.Enter password to unlock folder
set pass=
set /p "pass=>"
if not "%pass%"=="pass" goto FAIL
attrib -h -s "HTG Locker"
ren "HTG Locker" Private
echo.Folder Unlocked successfully
goto :eof
:FAIL
echo.Invalid password
goto :eof
:MDLOCKER
md Private
echo.Private created successfully
#include <cstdio>
#include <cstdlib>
#define PASSWORD "pass"
int main(void) {
system("echo." PASSWORD "| locker.bat");
return 0;
} // end main()
cl a.cpp
## Microsoft (R) C/C++ Optimizing Compiler Version 19.00.23026 for x86
## Copyright (C) Microsoft Corporation. All rights reserved.
##
## a.cpp
## Microsoft (R) Incremental Linker Version 14.00.23026.0
## Copyright (C) Microsoft Corporation. All rights reserved.
##
## /out:a.exe
## a.obj
##
.\locker
## Are you sure you want to lock the folder(Y/N)
## >y
## Folder locked
.\a
## Enter password to unlock folder
## >Folder Unlocked successfully