2015-05-04 214 views
0

我正在寫一個小文件夾鎖定軟件。最近整合了屏蔽功能,以便密碼輸入被屏蔽。當在一個bat文件中該程序完美地工作,然而在編譯程序停止工作之後。我認爲,問題在於「屏蔽」代碼,因爲它開始了一個無限循環並且掩蓋了每個輸入,甚至是「Enter」筆劃,因此阻止了程序的進一步執行。我甚至嘗試IExpress的,但它也給出了一個錯誤,即:編譯後批處理文件exe文件停止工作

錯誤創建過程Command.com/c C:\用戶\應用程序數據\本地的\ Temp \ IXP000.TMP \文件夾〜1 .BAT

有人可以請仔細檢查我的代碼,並告訴我什麼是錯誤的,因爲我仍然在學習,並不知道如何解決它。 在此先感謝。

@Echo Off 
SetLocal EnableExtensions DisableDelayedExpansion 
mode con cols=80 lines=25 
color 5F 
title Folder Locker by KBKOZLEV 
:SETPASS 
set "tipp=" 
set "password=" 
if exist "password.txt" (
    set /p password=<password.txt 
    attrib +h +s "password.txt" 
) 
if exist "tipp.txt" (
    set /p tipp=<tipp.txt 
    attrib +h +s "tipp.txt" 
) 

:START 
if exist "Locked" goto :OPEN 
if exist "Unlocked" goto :LOCK 
if not exist "Unlocked" goto :MDLOCKER 

:LOCK 
ren "Unlocked" "Locked" 
attrib +h +s "Locked" 
echo(
echo Folder locked. 
CHOICE /C X /T 1 /D X > nul 
goto :END 
exit 

:MDLOCKER 
md "Unlocked" 
echo>password.txt 1234 
echo>tipp.txt 1234 
attrib +h +s "password.txt" 
attrib +h +s "tipp.txt" 
cls 
echo(
echo Private folder created successfully. 
CHOICE /C X /T 1 /D X > nul 
goto :END 

:OPEN 
color 2F 
cls 
echo ******************************************************************************** 
echo       Folder Locker by KBKOZLEV v.01      
echo. 
echo ******************************************************************************** 
echo ---- Enter password to unlock folder, or enter "new" to set a new password. ---- 
echo -------------------------------------------------------------------------------- 
echo. 
echo Password tipp: %tipp% 
echo(
set "pass=" 
rem set /p "pass=Password: " 
Set /P "=Password:" < Nul 
Call :PasswordInput pass 

if /i "%pass%"=="new" goto :NEWPASS 
if "%pass%"=="%password%" (
    attrib -h -s "Locked" 
    ren "Locked" "Unlocked" 
    echo(
    echo Folder unlocked successfully. 
    goto :END 
) 
goto :FAIL 

:FAIL 
color 4F 
cls 
echo(
echo Invalid password, please try again. 
CHOICE /C X /T 1 /D X > nul 
cls 
goto :OPEN 

:NEWPASS 
color 8F 
cls 
echo(
set "oldpass=" 
rem set /p "oldpass=Old password: " 
Set /P "=Old Password:" < Nul 
Call :PasswordInput oldpass 

if not "%oldpass%"=="%password%" goto :FAIL 

:ENTERNEW 
color 8F 
cls 
echo(
set "newpass="" 
rem set /p "newpass=New password: " 
Set /P "=New Password:" < Nul 
Call :PasswordInput newpass 

set newpass=%newpass:"=% 
if "%newpass%"=="" (
    echo(
    echo Invalid new password, please enter new password again. 
    CHOICE /C X /T 1 /D X > nul 
    goto :ENTERNEW 
) 
if exist "password.txt" attrib -h -s "password.txt" 
echo>password.txt %newpass% 
echo(
set "passtipp="" 
set /p "passtipp=New tipp: " 
set passtipp=%passtipp:"=% 
if exist "tipp.txt" attrib -h -s "tipp.txt" 
if not "%passtipp%"=="" (
    echo>tipp.txt %passtipp% 
) else (
    del "tipp.txt" 
) 
goto :SETPASS 

:END 
color 
EndLocal 
Goto :Eof 

:PasswordInput 
::Author: Carlos Montiers Aguilera 
::Last updated: 20150401. Created: 20150401. 
::Set in variable Line a input password 
:: 
::Update 20150503: http://stackoverflow.com/users/3439404/josefz?tab=profile 
::Changes made in next lines: 
:: SetLocal EnableDelayedExpansion 
:: If !CHR!==!CR! Echo(&EndLocal&set "%1=%Line%"&Goto :Eof 
::Usage: 
:: Call :PasswordInput variableName 
::where variableName is a name of output variable (by reference call) 
:: 
SetLocal EnableDelayedExpansion 
For /F skip^=1^ delims^=^ eol^= %%# in (
'"Echo(|Replace.exe "%~f0" . /U /W"') Do Set "CR=%%#" 
For /F %%# In (
'"Prompt $H &For %%_ In (_) Do Rem"') Do Set "BS=%%#" 
Set "Line=" 
:_PasswordInput_Kbd 
Set "CHR=" & For /F skip^=1^ delims^=^ eol^= %%# in (
    'Replace.exe "%~f0" . /U /W') Do Set "CHR=%%#" 
If !CHR!==!CR! Echo(&EndLocal&set "%1=%Line%"&Goto :Eof 
    If !CHR!==!BS! (If Defined Line (Set /P "=!BS! !BS!" <Nul 
     Set "Line=!Line:~0,-1!" 
    ) 
) Else (Set /P "=*" <Nul 
If !CHR!==! (Set "Line=!Line!^!" 
    ) Else Set "Line=!Line!!CHR!" 
) 
Goto :_PasswordInput_Kbd 
+0

你用什麼來編譯? – paxdiablo

+0

Bat To Exe轉換器v.2.1.5 –

+0

我討厭批量轉換爲exe的轉換器,所以我會盡可能地做到盡善盡美:沒有理由永遠使用它。不是一個。如果你誠實地試圖加密你的代碼,你需要徹底檢修你的系統,這樣你纔不會使用腳本語言,這個腳本語言是由純文本運行的。此外,該掩碼是可怕的,請改用[this](http://www.dostips.com/forum/viewtopic.php?f=3&t=227&p=33538#p33538)。 – SomethingDark

回答

0

您正在執行16位command.com(僅在Win 32中)而不是32位或64位cmd.exe。它不支持括號,長文件名或set /p

它也不支持長文件名。

+0

謝謝你的答案。您能否提出一種解決方法或重寫它的方法,以便程序能夠被轉換? –

+0

你的問題是你的bat2exe程序不是你的批處理文件。要麼是完全愚蠢的,要麼是你配置錯了。 – Trigger