ฉันสามารถปิดบังข้อความที่ป้อนในไฟล์ค้างคาวได้หรือไม่


102

ฉันกำลังเขียนไฟล์แบตช์เพื่อรันโปรแกรมอื่น ๆ ในกรณีนี้ฉันต้องขอรหัสผ่าน ฉันมีวิธีการปิดบังข้อความที่ป้อนหรือไม่ ฉันไม่จำเป็นต้องพิมพ์อักขระ ******* แทนอักขระที่ป้อน พฤติกรรมการแจ้งรหัสผ่านของ Linux (พิมพ์อะไรขณะพิมพ์) ก็เพียงพอแล้ว

@echo off
SET /P variable=Password : 
echo %variable%
Pause

สิ่งนี้จะอ่านอินพุต แต่ฉันไม่สามารถปิดบังข้อความโดยใช้วิธีนี้ได้


คำตอบ:


50

สูงสุด XP และ Server 2003 คุณสามารถใช้เครื่องมืออื่นที่รวมอยู่ (VBScript) - สคริปต์สองตัวต่อไปนี้ทำงานที่คุณต้องการ

อันดับแรกgetpwd.cmd:

@echo off
<nul: set /p passwd=Password: 
for /f "delims=" %%i in ('cscript /nologo getpwd.vbs') do set passwd=%%i
echo.

จากนั้นgetpwd.vbs:

Set oScriptPW = CreateObject("ScriptPW.Password")
strPassword = oScriptPW.GetPassword()
Wscript.StdOut.WriteLine strPassword

getpwd.vbsเพียงใช้วัตถุรหัสผ่านเพื่อใส่รหัสผ่านของผู้ใช้และจากนั้นพิมพ์ออกมาตรฐาน (ย่อหน้าถัดไปจะอธิบายว่าทำไมไม่แสดงขึ้นใน terminal)

getpwd.cmdคำสั่งสคริปต์เป็น trickier บิต แต่มันเป็นพื้นทำงานดังนี้

เอฟเฟกต์ของ"<nul: set /p passwd=Password: "คำสั่งคือการส่งออกพรอมต์โดยไม่มีอักขระขึ้นบรรทัดต่อท้ายซึ่งเป็นวิธีที่แอบแฝงในการจำลอง "echo -n"คำสั่งจากbashเชลล์ มันตั้งค่าpasswdเป็นสตริงว่างเป็นผลข้างเคียงที่ไม่เกี่ยวข้องและไม่รอการป้อนข้อมูลเนื่องจากรับอินพุตจากnul:อุปกรณ์

"for /f "delims=" %%i in ('cscript /nologo getpwd.vbs') do set passwd=%%i"คำสั่งเป็นบิตยาก มันทำงาน VBScript กับไมโครซอฟท์ไม่มี "การโฆษณา" เพื่อให้การส่งออกเพียงบรรทัดคือรหัสผ่าน (จาก "Wscript.StdOut.WriteLine strPassword"VBscript

การตั้งค่าตัวคั่นเป็นอะไรไม่จำเป็นต้องจับบรรทัดอินพุตทั้งหมดด้วยช่องว่างมิฉะนั้นคุณจะได้คำแรก "for ... do set ..."บิตชุดpasswdจะเป็นเอาท์พุทรหัสผ่านที่เกิดขึ้นจริงจาก VBScript

จากนั้นเราจะสะท้อนบรรทัดว่าง (เพื่อยุติ"Password: "บรรทัด) และรหัสผ่านจะอยู่ในpasswdตัวแปรสภาพแวดล้อมหลังจากที่โค้ดทำงาน


ตอนนี้ดังที่ได้กล่าวไปแล้วscriptpw.dllใช้ได้ถึง XP / 2003 เท่านั้น ในการแก้ไขปัญหานี้คุณสามารถคัดลอกscriptpw.dllไฟล์จากWindows\System32โฟลเดอร์ของระบบ XP / 2003 ไปยังโฟลเดอร์Winnt\System32หรือWindows\System32ในระบบของคุณเอง เมื่อคัดลอก DLL แล้วคุณจะต้องลงทะเบียนโดยเรียกใช้:

regsvr32 scriptpw.dll

ในการลงทะเบียน DLL บน Vista และใหม่กว่าคุณจะต้องมีสิทธิ์ของผู้ดูแลระบบ ฉันยังไม่ได้ตรวจสอบความถูกต้องตามกฎหมายของการย้ายดังกล่าวดังนั้นผู้บรรยายในถ้ำ


หากคุณไม่กระตือรือร้นที่จะพยายามติดตามและลงทะเบียนไฟล์ DLL รุ่นเก่ามากเกินไป (เพื่อความสะดวกหรือเหตุผลทางกฎหมาย) มีอีกวิธีหนึ่ง Windows รุ่นที่ใหม่กว่า (รุ่นที่ไม่มี DLL ที่จำเป็น) ควรมี Powershell ให้คุณใช้งาน

cmd.exeและในความเป็นจริงคุณควรพิจารณาปรับสคริปต์ของคุณจะใช้มันได้อย่างเต็มที่เนื่องจากเป็นภาษาสคริปต์ที่มีความสามารถมากขึ้นกว่า อย่างไรก็ตามหากคุณต้องการเก็บโค้ดจำนวนมากไว้เป็นcmd.exeสคริปต์ (เช่นหากคุณมีโค้ดจำนวนมากที่ไม่ต้องการแปลง) คุณสามารถใช้เคล็ดลับเดียวกันได้

ขั้นแรกให้แก้ไขcmdสคริปต์เพื่อให้เรียกว่า Powershell แทนที่จะเป็น CScript:

@echo off
for /f "delims=" %%i in ('powershell -file getpwd.ps1') do set passwd=%%i

สคริปต์ Powershell นั้นง่ายพอ ๆ กัน:

$password = Read-Host "Enter password" -AsSecureString
$password = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($password)
$password = [Runtime.InteropServices.Marshal]::PtrToStringAuto($password)
echo $password

แม้ว่าจะมีมาร์แชลลิ่งเพื่อรับข้อความรหัสผ่านจริง

โปรดจำไว้ว่าในการเรียกใช้สคริปต์ Powershell ในเครื่องที่ไม่ได้ลงนามในเครื่องของคุณคุณอาจต้องแก้ไขนโยบายการดำเนินการจากค่าเริ่มต้น (draconian แม้ว่าจะปลอดภัยมาก) โดยมีสิ่งต่างๆเช่น:

set-executionpolicy remotesigned

จากภายใน Powershell เอง


2
โอ้โห <nul: set / p เจ๋งมาก ไม่รู้ป่านนี้ :-) แต่ VBScript ใช้ไม่ได้สำหรับฉัน: ข้อผิดพลาดรันไทม์ Microsoft VBScript: คอมโพเนนต์ ActiveX ไม่สามารถสร้างวัตถุ: 'ScriptPW.Password' Windows 7 Beta x64 ที่นี่
Joey

น่าสนใจมันควรจะพร้อมใช้งานจาก XP บน ฉันสงสัยว่า Win7 ยังไม่เสร็จสมบูรณ์ถ้ามันไม่ทำงานที่นั่น (หรือคุณต้องใช้กลอุบายอื่น ๆ เพื่อให้มันใช้งานได้) การวิจัยเล็กน้อยแสดงให้เห็นว่าทำไม: ดูการอัปเดตของฉัน
paxdiablo

2
ดี. นอกจากนี้โปรดทราบว่าคุณสามารถแทนที่ไฟล์ VBS สำหรับภาษาที่เทียบเท่าที่สามารถเรียกได้จากบรรทัดคำสั่ง ตัวอย่างเช่นคุณสามารถแทนที่ส่วน cscript ด้วย: 'python -c "จาก getpass import getpass; pwd = getpass (); print pwd;"'
Cerin

1
ฉันเคยใช้วิธีนี้ย้อนกลับไปเมื่อคำถามนี้เป็นคำถามใหม่ - ฉันตอบด้านล่างวิธีดำเนินการโดยไม่ต้องใช้สคริปต์เพิ่มเติม
unclemeat

1
@ บิล: ดังนั้นส่วนของฉันจึงเริ่ม "ตอนนี้น่าเสียดายที่ ... " :-) อย่างไรก็ตามฉันได้เพิ่มตัวเลือกเพิ่มเติมสำหรับคำตอบเพื่อหวังว่าจะทำให้ดีขึ้น โดยเฉพาะการใช้ powershell มากกว่าscriptpw.dll.
paxdiablo

154

ใช่ - ฉันมาช้าไป 4 ปี

แต่ฉันพบวิธีทำในบรรทัดเดียวโดยไม่ต้องสร้างสคริปต์ภายนอก โดยเรียกคำสั่ง powershell จากไฟล์แบตช์

ขอบคุณ TessellatingHeckler - โดยไม่ต้องส่งออกไปยังไฟล์ข้อความ (ฉันตั้งค่าคำสั่ง powershell ในตัวแปรเพราะมันค่อนข้างยุ่งในบรรทัดยาวหนึ่งบรรทัดภายใน for loop)

@echo off
set "psCommand=powershell -Command "$pword = read-host 'Enter Password' -AsSecureString ; ^
    $BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pword); ^
        [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)""
for /f "usebackq delims=" %%p in (`%psCommand%`) do set password=%%p
echo %password%

เดิมทีฉันเขียนมันเพื่อส่งออกไปยังไฟล์ข้อความจากนั้นอ่านจากไฟล์ข้อความนั้น แต่วิธีข้างต้นจะดีกว่า ในบรรทัดเดียวที่ยาวมากใกล้เข้าใจยาก:

@echo off
powershell -Command $pword = read-host "Enter password" -AsSecureString ; $BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pword) ; [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR) > .tmp.txt & set /p password=<.tmp.txt & del .tmp.txt
echo %password%

ฉันจะทำลายมันลง - คุณสามารถแยกมันออกเป็นสองสามบรรทัดโดยใช้คาเร็^ตซึ่งดีกว่ามาก ...

@echo off
powershell -Command $pword = read-host "Enter password" -AsSecureString ; ^
    $BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pword) ; ^
        [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR) > .tmp.txt 
set /p password=<.tmp.txt & del .tmp.txt
echo %password%

บทความนี้อธิบายว่าคำสั่ง powershell กำลังทำอะไร เป็นหลักที่จะได้รับการป้อนข้อมูลโดยใช้Read-Host -AsSecureString- สองบรรทัดต่อไปแปลงกลับสตริงที่เชื่อถือได้เป็นข้อความธรรมดาเอาท์พุท (รหัสผ่าน plaintext) >.tmp.txtจะถูกส่งไปยังแฟ้มข้อความโดยใช้ ไฟล์นั้นจะถูกอ่านเป็นตัวแปรและลบออก


6
คำตอบเดิมนั้นยอดเยี่ยม แต่ฉันคิดว่าตอนนี้ควรเป็นคำตอบที่ชัดเจนแล้ว
James Wiseman

31
นี่เป็นสิ่งที่ยอดเยี่ยม แต่วิธีบันทึกรหัสผ่านข้อความธรรมดาลงดิสก์ทำให้ฉันไม่สบายใจ หลีกเลี่ยงการทำว่าการดำเนินการนี้แทน: แล้วfor /f "usebackq tokens=*" %%p in (``powershell -Command "$pword = read-host 'Enter Password' -AsSecureString ; $BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pword); [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)"``) do set password=%%p echo %password%NB. ฉันไม่สามารถรับความคิดเห็นนี้เพื่อหลีกเลี่ยง backticks ได้อย่างถูกต้อง - ก่อน "powershell" และก่อนจบ ")" เป็นแบ็คทิกสองตัว แต่ควรเป็นแบ็คทิก 1 อัน
TessellatingHeckler

2
@TessellatingHeckler ความคิดที่ดีฉันได้อัปเดตคำตอบของฉันแล้ว คำแนะนำของคุณในเวอร์ชันแก้ไขเล็กน้อย ขอบคุณ.
unclemeat

เป็นไปได้ไหมที่จะหยุดวิธีนี้ไม่ให้สะท้อน "*" (ดาว) สำหรับการกดแต่ละครั้ง เช่นฉันไม่ต้องการให้ผู้สังเกตการณ์รู้ว่ารหัสผ่านยาวแค่ไหน
Sam Hasler

1
@RegieBaguio ไม่คุณจะต้องเปิดใช้งาน Powershell ดูโซลูชัน Batch บริสุทธิ์ของ npocmaka ด้านล่าง มันซับซ้อนกว่านี้มาก แต่น่าจะเหมาะกับคุณ
unclemeat

26

1. โซลูชันชุดงานบริสุทธิ์ที่ (ab) ใช้XCOPYคำสั่งและ/P /Lสวิตช์พบได้ที่นี่ (สามารถดูการปรับปรุงบางอย่างได้ที่นี่ ):

:: Hidden.cmd
::Tom Lavedas, 02/05/2013, 02/20/2013
::Carlos, 02/22/2013
::https://groups.google.com/forum/#!topic/alt.msdos.batch.nt/f7mb_f99lYI


@Echo Off
:HInput
SetLocal EnableExtensions EnableDelayedExpansion
Set "FILE=%Temp%.\T"
Set "FILE=.\T"
Keys List >"%File%"
Set /P "=Hidden text ending with Ctrl-C?: " <Nul
Echo.
Set "HInput="
:HInput_
For /F "tokens=1* delims=?" %%A In (
 '"Xcopy /P /L "%FILE%" "%FILE%" 2>Nul"'
) Do (
  Set "Text=%%B"
  If Defined Text (
    Set "Char=!Text:~1,1!"
    Set "Intro=1"
    For /F delims^=^ eol^= %%Z in ("!Char!") Do Set "Intro=0"
    Rem If press Intro
    If 1 Equ !Intro! Goto :HInput#
    Set "HInput=!HInput!!Char!"
  )
)
Goto :HInput_
:HInput#
Echo(!HInput!
Goto :Eof 

1.2 อีกวิธีหนึ่งตามคำสั่งแทนที่

@Echo Off
SetLocal EnableExtensions EnableDelayedExpansion

Set /P "=Enter a Password:" < Nul
Call :PasswordInput
Echo(Your input was:!Line!

Goto :Eof

:PasswordInput
::Author: Carlos Montiers Aguilera
::Last updated: 20150401. Created: 20150401.
::Set in variable Line a input password
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(&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

ส่ง 2.Password ที่ใช้ HTA ป๊อปอัพ นี่คือไฟล์ hybrit .bat / jscript / mshtaและควรบันทึกเป็น. bat :

<!-- :
:: PasswordSubmitter.bat
@echo off
for /f "tokens=* delims=" %%p in ('mshta.exe "%~f0"') do (
    set "pass=%%p"
)

echo your password is %pass%
exit /b
-->

<html>
<head><title>Password submitter</title></head>
<body>

    <script language='javascript' >
        window.resizeTo(300,150);
        function entperPressed(e){
                if (e.keyCode == 13) {
                    pipePass();
                }
        }
        function pipePass() {
            var pass=document.getElementById('pass').value;
            var fso= new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1);
            close(fso.Write(pass));

        }
    </script>

    <input type='password' name='pass' size='15' onkeypress="return entperPressed(event)" ></input>
    <hr>
    <button onclick='pipePass()'>Submit</button>

</body>
</html>

3. net ไฮบริดที่คอมไพล์ด้วยตัวเองควรบันทึกอีกครั้งเป็น.bat. แตกต่างจากโซลูชันอื่นจะสร้าง / รวบรวมไฟล์. exe ขนาดเล็กที่จะถูกเรียก (หากคุณต้องการคุณสามารถลบได้) ต้องติดตั้ง. net framework ด้วย แต่นั่นไม่ใช่ปัญหา:

@if (@X)==(@Y) @end /* JScript comment
@echo off
setlocal enableDelayedExpansion

for /f "tokens=* delims=" %%v in ('dir /b /s /a:-d  /o:-n "%SystemRoot%\Microsoft.NET\Framework\*jsc.exe"') do (
   set "jsc=%%v"
)

if not exist "%~n0.exe" (
    "%jsc%" /nologo /out:"%~n0.exe" "%~dpsfnx0"
)

for /f "tokens=* delims=" %%p in ('"%~n0.exe"') do (
    set "pass=%%p"
)

echo your password is !pass!

endlocal & exit /b %errorlevel%

*/



import System;



var pwd = "";
var key;

Console.Error.Write("Enter password: ");

        do {
           key = Console.ReadKey(true);

           if ( (key.KeyChar.ToString().charCodeAt(0)) >= 20 && (key.KeyChar.ToString().charCodeAt(0) <= 126) ) {
              pwd=pwd+(key.KeyChar.ToString());
              Console.Error.Write("*");
           }

           if ( key.Key == ConsoleKey.Backspace && pwd.Length > 0 ) {
               pwd=pwd.Remove(pwd.Length-1);
               Console.Error.Write("\b \b");
           }


        } while (key.Key != ConsoleKey.Enter);
        Console.Error.WriteLine();
        Console.WriteLine(pwd);

6
ความรู้สึกแฮ็คของฉันรู้สึกเสียวซ่าโดยเฉพาะที่ไฮบริด!
Mark K Cowan

2
วิธีแก้ปัญหาแรกนั้นฉลาดมาก - +1 ที่ดี
unclemeat

วิธี 2.1 ตามคำสั่งแทนที่จะพลาดการกดแป้นพิมพ์หากคุณพิมพ์อย่างรวดเร็ว
Sam Hasler

@SamHasler - ใช่ฉันจะพยายามแก้ไขปัญหานี้แม้ว่าจะไม่สามารถทำให้เกิดปัญหากับ 2.1 ฉันได้อัปเดต HTA ด้วยเพื่อตรวจสอบว่ามีการกด Enter หรือไม่
npocmaka

1
@npocmaka เวอร์ชันล่าสุดของเมธอด 1.2 (อัปเดตล่าสุด: 20150405) อยู่ที่นี่: consolesoft.com/batch/password_input/password_input.cmd
carlos

16

ฉันอาจจะทำ:

..
echo Before you enter your password, make sure no-one is looking!
set /P password=Password:  
cls
echo Thanks, got that.
.. 

ดังนั้นคุณจะได้รับข้อความแจ้งจากนั้นหน้าจอจะล้างหลังจากป้อน

โปรดทราบว่ารหัสผ่านที่ป้อนจะถูกเก็บไว้ในประวัติ CMD หากไฟล์แบตช์ถูกเรียกใช้งานจากพรอมต์คำสั่ง (ขอบคุณ @Mark K Cowan )

หากยังไม่ดีพอฉันจะเปลี่ยนไปใช้ python หรือเขียนไฟล์ปฏิบัติการแทนสคริปต์

ฉันรู้ว่าสิ่งเหล่านี้ไม่มีอะไรที่สมบูรณ์แบบ แต่บางทีอาจจะดีพอสำหรับคุณ :)


4
โปรดทราบว่ารหัสผ่านที่ป้อนจะถูกเก็บไว้ในประวัติ CMD หากไฟล์แบตช์ถูกเรียกใช้งานจากพรอมต์คำสั่ง ไม่มีการโหวตลงคะแนนแม้ว่าคุณจะบอกว่า cmd เป็นเครื่องมือที่ไม่ถูกต้องสำหรับงาน
Mark K Cowan

คุณสามารถเรียกใช้doskey /reinstallเพื่อล้างบัฟเฟอร์คำสั่งก่อนหน้าได้ทันทีclsหากประวัติคำสั่งในคอนโซลไม่สำคัญสำหรับคุณ
RuntimeException

1
หากคุณไม่ต้องการใช้ doskey / ติดตั้งใหม่และล้างประวัติคำสั่งตัวเลือกอื่นคือเรียกใช้รหัสด้านบนในหน้าต่างเทอร์มินัลแยกต่างหากและออกทันที โปรดทราบว่ายังไม่แทนที่สตริงที่คุณพิมพ์ด้วยเครื่องหมายดอกจัน โซลูชันด้านบนเป็นตัวเลือกหากคุณไม่ต้องการเรียกใช้ powershell C:\>start "console" cmd /c ireadconsole.bat
RuntimeException

10

คุณสามารถใช้รูทีนย่อย ReadFormattedLine สำหรับอินพุตที่จัดรูปแบบทุกชนิด ตัวอย่างเช่นคำสั่งด้านล่างอ่านรหัสผ่าน 8 ตัวอักษรแสดงเครื่องหมายดอกจันบนหน้าจอและดำเนินการต่อโดยอัตโนมัติโดยไม่ต้องกด Enter:

call :ReadFormattedLine password="********" /M "Enter password (8 chars): "

subroutine นี้ถูกเขียนในชุดบริสุทธิ์จึงไม่จำเป็นต้องใช้โปรแกรมใด ๆ เพิ่มเติมและจะช่วยให้การดำเนินงานต่างๆป้อนข้อมูลรูปแบบเช่นหมายเลขเพียงแค่อ่านตัวอักษรแปลงเป็นตัวพิมพ์ใหญ่ ฯลฯ คุณสามารถดาวน์โหลด ReadFormattedLine ย่อยจากอ่านสอดคล้องกับรูปแบบที่เฉพาะเจาะจง


แก้ไข 2018-08-18 : วิธีใหม่ในการป้อนรหัสผ่าน "ล่องหน"

คำสั่ง FINDSTR มีบั๊กแปลก ๆ ที่เกิดขึ้นเมื่อใช้คำสั่งนี้เพื่อแสดงอักขระเป็นสีและผลลัพธ์ของคำสั่งดังกล่าวจะถูกเปลี่ยนเส้นทางไปยังอุปกรณ์ CON สำหรับรายละเอียดเกี่ยวกับวิธีใช้คำสั่ง FINDSTR เพื่อแสดงข้อความเป็นสีโปรดดูหัวข้อนี้

เมื่อเอาต์พุตของคำสั่ง FINDSTR รูปแบบนี้ถูกเปลี่ยนเส้นทางไปยัง CON จะมีบางอย่างแปลก ๆ เกิดขึ้นหลังจากที่ข้อความถูกส่งออกเป็นสีที่ต้องการ: ข้อความทั้งหมดหลังจากที่ส่งออกเป็นอักขระ "มองไม่เห็น" แม้ว่าคำอธิบายที่แม่นยำกว่านั้นก็คือข้อความนั้น ออกเป็นข้อความสีดำบนพื้นหลังสีดำ ข้อความต้นฉบับจะปรากฏขึ้นหากคุณใช้คำสั่ง COLOR เพื่อรีเซ็ตสีพื้นหน้าและพื้นหลังของหน้าจอทั้งหมด อย่างไรก็ตามเมื่อข้อความ "มองไม่เห็น" เราสามารถเรียกใช้คำสั่ง SET / P ได้ดังนั้นอักขระทั้งหมดที่ป้อนจะไม่ปรากฏบนหน้าจอ

@echo off
setlocal

set /P "=_" < NUL > "Enter password"
findstr /A:1E /V "^$" "Enter password" NUL > CON
del "Enter password"
set /P "password="
cls
color 07
echo The password read is: "%password%"

5

อีกทางเลือกหนึ่งคือเครื่องมือบรรทัดคำสั่ง EditV32 (x86) หรือ EditV64 (x64) ของฉัน ตัวอย่างเช่น:

editv32 -m -p "Password: " PWD

-m หมายถึง "Masked input" และ -p คือพร้อมต์ อินพุตของผู้ใช้จะถูกเก็บไว้ในตัวแปรสภาวะแวดล้อม PWD คุณสามารถรับได้ที่นี่:

https://westmesatech.com/?page_id=19


5
นี่ไม่ใช่โซลูชันแบบปิดเพียงอย่างเดียว (Windows เป็นแบบปิด!) คุณมีอิสระที่จะไม่ใช้มันแน่นอน ...
Bill_Stewart

หากขาดของรหัสที่มารบกวนจิตใจคุณดูคำตอบอื่น ๆ ของฉันเกี่ยวกับReadLine.exe
Bill_Stewart

สิ่งที่ดี! ใบอนุญาตอนุญาตให้คุณใช้งานได้ นอกจากนี้ยังง่ายต่อการรวม เพียงเพื่อจัดการกับรหัสทางออก 1. ข้อผิดพลาดในบรรทัดคำสั่ง 2 บรรทัดอินพุตว่างเปล่า 3 ตัวแปรสภาพแวดล้อมไม่ได้เปลี่ยน 4 โปรแกรมถูกยกเลิกด้วย Ctrl-C
James Jithin

หมายเหตุ: editenv32 / editenv64 และ ReadLine สาธารณูปโภคได้รับการแทนที่โดยมาเปิดeditenv utilty
Bill_Stewart

4

หากไม่มีซอร์สโค้ดรบกวนคุณฉันมีทางเลือกอื่น

@echo off
for /f "delims=" %%p in ('ReadLine -h -p "Enter password: "') do set PWD=%%p
echo You entered: %PWD%

คุณจะได้รับจากhttps://westmesatech.com/?page_id=49 รวมซอร์สโค้ด


หมายเหตุ: editenv32 / editenv64 และ ReadLine สาธารณูปโภคได้รับการแทนที่โดยมาเปิดeditenv utilty
Bill_Stewart

3

หากคุณติดตั้ง Python ไว้คุณสามารถใช้:

for /f "delims=" %%A in ('python -c "import getpass; print(getpass.getpass('Enter the CVS password: '));"') do @set CVSPASS=%%A
echo PASS: %CVSPASS%

ผลลัพธ์:

Enter the CVS password:
PASS: 123

2

ฉันใช้โซลูชันข้างต้นของ Blorgbeard ซึ่งดีมากในความคิดของฉัน จากนั้นฉันปรับปรุงมันดังนี้:

  1. Google สำหรับansicon
  2. ดาวน์โหลดไฟล์ zip และไฟล์ข้อความตัวอย่าง
  3. ติดตั้ง (นั่นหมายถึงคัดลอก 2 ไฟล์ลงใน system32)

ใช้แบบนี้:

@echo off
ansicon -p
set /p pwd=Password:ESC[0;37;47m
echo ESC[0m

การดำเนินการนี้จะเปลี่ยนคอนโซลเป็นสีเทาบนสีเทาสำหรับการป้อนรหัสผ่านของคุณและจะเปลี่ยนกลับเมื่อคุณทำเสร็จแล้ว ESC ควรเป็นอักขระที่ไม่สามารถพิมพ์ได้ซึ่งคุณสามารถคัดลอกจากไฟล์ข้อความตัวอย่างที่ดาวน์โหลดมา (ดูเหมือนลูกศรซ้ายใน Notepad) ลงในไฟล์แบตช์ของคุณ คุณสามารถใช้ไฟล์ข้อความตัวอย่างเพื่อค้นหารหัสสำหรับการผสมสีทั้งหมด

หากคุณไม่ใช่ผู้ดูแลระบบคุณอาจจะสามารถติดตั้งไฟล์ในไดเร็กทอรีที่ไม่ใช่ระบบได้จากนั้นคุณต้องต่อท้ายไดเร็กทอรีเข้ากับ PATH ในสคริปต์ของคุณก่อนที่จะเรียกโปรแกรมและใช้ลำดับการหลีกเลี่ยง นี่อาจเป็นไดเร็กทอรีปัจจุบันหากคุณต้องการแพ็กเกจที่ไม่ใช่ผู้ดูแลระบบแจกจ่ายไฟล์เพียงไม่กี่ไฟล์


ฉันไม่สามารถทดสอบสิ่งนี้ได้ แต่คาดว่ารหัสผ่านที่พิมพ์จะปรากฏในประวัติ cmd ในภายหลัง
Mark K Cowan

@MarkKCowan นั่นคือสิ่งที่เกิดขึ้น
sjngm

2

คุณสามารถตั้งค่าสีพื้นเป็นสีดำได้ดังนี้:

:: see /programming/33293220/what-is-the-fastest-color-function-in-batch
for /F %%a in ('echo prompt $E ^| cmd') do set "ESC=%%a"
set color_white=%ESC%[37m
set color_black=%ESC%[30m
echo(
set /p user=Username:
set /p pass=password:%color_black%
echo %color_white%
echo blablablba

สนุก!!! ค.


เพียงเพื่อทราบ: ใช้งานได้ตามที่ตั้งใจไว้echo offเท่านั้นมิฉะนั้นsetคำสั่งจะเปลี่ยนสีไปแล้ว และแน่นอนเมื่อสีพื้นหลังเป็นสีดำอยู่แล้ว (โดยค่าเริ่มต้น แต่คุณไม่สามารถพึ่งพาได้) การค้นหาที่ดี (แม้ว่าฉันสงสัยว่ามันจะใช้งานได้ในปี 2009)
เตฟาน

1

สร้างไฟล์แบตช์ที่เรียกไฟล์ที่จำเป็นสำหรับอักขระที่มองไม่เห็นจากนั้นสร้างทางลัดสำหรับไฟล์แบตช์ที่ถูกเรียก

คลิกขวา

คุณสมบัติ

สี

text == สีดำ

พื้นหลัง == สีดำ

สมัคร

ตกลง

หวังว่าจะช่วยคุณได้ !!!!!!!!


แนวทางการคิดด้านข้างที่ดีแม้ว่าจะไม่สามารถใช้ได้จริงเสมอไปในสถานการณ์แบบกลุ่มเนื่องจากต้องจัดสภาพแวดล้อมล่วงหน้า
เดี๋ยวก่อน

1

อัพเดท:
ฉันได้เพิ่มวิธีการใหม่สองวิธีที่แทนที่จะใช้ cls เพื่อซ่อนอินพุตพวกเขาสร้างป๊อปอัปใหม่ด้วยบรรทัดเดียวเท่านั้น

ข้อเสียคือวิธีการหนึ่ง (วิธีที่ 2) ทิ้งขยะไว้ในรีจิสทรี - "หากเรียกใช้โดยไม่มีสิทธิ์ที่เหมาะสม" และอีกวิธีหนึ่ง (วิธีที่สาม) จะผนวกขยะบางส่วนเข้ากับสคริปต์ ไม่จำเป็นต้องบอกว่ามันสามารถเขียนลงในไฟล์ tmp ใด ๆ ได้อย่างง่ายดายและฉันเพิ่งพยายามหาทางเลือกอื่น

ข้อ จำกัด :รหัสผ่านต้องเป็นตัวเลขและตัวอักษรเท่านั้นไม่มีอักขระอื่น ๆ !

@echo off
if "%1"=="method%choice%" goto :method%choice%
::::::::::::::::::
::Your code here::
::::::::::::::::::
cls
echo :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
echo ::::                   Batch script to prompt for password!                 :::
echo :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:choice
echo.
echo 1. First method
echo.
echo 2. Second method
echo.
echo 3. Third method
echo.
set/p choice=Choose a method: 
if "%choice%" gtr "3" echo. & echo invalid option & echo. & pause & goto choice

call :vars
    set options= %num%%smAlph%%cpAlph%
    set pwdLen=6

if "%choice%" == "1" (
    set /p=Password: <nul 
    for /l %%i in (1,1,%pwdLen%) do call :password
) else (
    start /wait cmd /c call "%~f0" method%choice%
    )

call :result%choice%


::just to see if it worked!
echo.
echo The Password you entered is: "%pwd%"&pause>nul

::::::::::::::::::
::More code here::
::::::::::::::::::
exit /b





:vars
set num=1234567890
set smAlph=abcdefghijklmnopqrstuvwxyz
set cpAlph=ABCDEFGHIJKLMNOPQRSTUVWXYZ
    set pwd=
goto :EOF


:method2
call :popUp
setx result %pwd% >nul
goto :EOF

:method3
call :popUp
    >> "%~f0" echo.
    >> "%~f0" echo :result%choice%
    >> "%~f0" echo set pwd=%pwd%
goto :EOF

:popUp
title Password
mode con lines=1 cols=30
color 5a
set /p=Password: <nul
for /l %%i in (1,1,%pwdLen%) do call :password
goto :EOF

:password
:: If you don't want case sensative remove "/cs" but remember to remove %cpAlph% from the %options%
choice /c %options% /n /cs >nul
    call SET pwd=%pwd%%%options:~%errorlevel%,1%%
    set /p =*<nul
GOTO :EOF


:result2
for /f "tokens=3" %%a in ('reg query hkcu\environment /v result') do set pwd=%%a
    setx result "" >nul
    reg delete hkcu\environment /v result /f >nul 2>&1
:result1
goto :EOF   
::You can delete from here whenever you want.

อัปเดต: ฉันพบว่าโพสต์ของ Sachadee นั้นสมบูรณ์แบบและฉันเพิ่งเพิ่มมุมมอง "ป๊อปอัป" ของฉันเข้าไป

@Echo Off  
  SetLocal EnableDelayedExpansion
  if "%1"==":HInput" goto :HInput
  set r=r%random%
  start /wait cmd /c call "%~f0" :HInput

For /f "tokens=2,13 delims=, " %%a in (
    'tasklist /v /fo csv /fi "imagename eq cmd.exe"
    ^|findstr /v "Windows\\system32\\cmd.exe"
    ^|findstr "set /p=%r%"'
     ) do (
        set pid=%%a
        set Line=%%b
        set Line=!Line:%r%=!
        set Line=!Line:~,-2!
        )       
taskkill /pid %pid:"=%>nul
  goto :HIEnd


  :HInput
  SetLocal DisableDelayedExpansion
  title Password
  mode con lines=2 cols=30

Echo Enter your Code :
   Set "Line="
   For /F %%# In (
   '"Prompt;$H&For %%# in (1) Do Rem"'
   ) Do Set "BS=%%#"

  :HILoop
   Set "Key="
   For /F "delims=" %%# In (
   'Xcopy /W "%~f0" "%~f0" 2^>Nul'
   ) Do If Not Defined Key Set "Key=%%#"
   Set "Key=%Key:~-1%"
   SetLocal EnableDelayedExpansion
   If Not Defined Key start /min cmd /k mode con lines=1 cols=14 ^&set/p %r%!Line!=&exit
  If %BS%==^%Key% (Set /P "=%BS% %BS%" <Nul
   Set "Key="
   If Defined Line Set "Line=!Line:~0,-1!"
   ) Else Set /P "=*" <Nul
   If Not Defined Line (EndLocal &Set "Line=%Key%"
   ) Else For /F delims^=^ eol^= %%# In (
   "!Line!") Do EndLocal &Set "Line=%%#%Key%"
  Goto :HILoop

  :HIEnd
   Echo(
Echo Your code is :  "!Line!"
   Pause
   Goto :Eof

1

ฉันเขียนโปรแกรมโอเพ่นซอร์สที่เรียกeditenvว่าแทนที่editv32/ editv64ยูทิลิตี้รุ่นเก่าของฉัน:

https://github.com/Bill-Stewart/editenv

--maskinput( -m) ตัวเลือก [*] ช่วยให้คุณซ่อน (หน้ากาก) อินพุตพิมพ์และมีตัวอักษรที่กำหนด (ตัวอักษรเริ่มต้นเป็น*); เช่น:

editenv -m -p "Password: " PWD

--prompt( -p) ตัวเลือกที่ช่วยให้คุณระบุพร้อมท์การป้อนข้อมูล ด้านบนจะแสดงPassword:ข้อความแจ้งและรอให้คุณป้อนข้อมูล *ตัวอักษรที่พิมพ์จะปรากฏเป็น การกดCtrl+ Cจะสิ้นสุดโปรแกรมโดยมีรหัสออกเป็น 1223

ดาวน์โหลดอยู่ที่นี่:

https://github.com/Bill-Stewart/editenv/releases

[*] โปรดทราบว่าตัวเลือก--maskinput( -m) ไม่ปลอดภัย - สตริงที่ป้อนจะถูกป้อนเป็นข้อความธรรมดาในสภาพแวดล้อม คุณสมบัตินี้มีไว้เพื่อความสะดวกเท่านั้น


0

นี่อาจเป็นหัวข้อที่เก่ากว่า แต่ถ้าคุณใช้ Windows Vista หรือ 7 ฉันมีวิธีแก้ปัญหาที่จะใช้งานได้ดี ฉันสร้างวิดีโอไว้ที่นี่: http://www.youtube.com/watch?v=mk8uAa6PIFM

Pastebin สำหรับไฟล์แบตช์อยู่ที่นี่


-1
@echo off
color 0f
MODE CON COLS=132 LINES=50
:start
cls
choice /C ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!?.# /N /CS /M Please enter your password to continue. (Valid characters include all letters, numbers, and ! ? .) Press # to submit: 
SET ecode=%ERRORLEVEL%
IF %ecode% EQU 66 goto submit
IF %ecode% EQU 1 SET out=A
IF %ecode% EQU 2 SET out=B
IF %ecode% EQU 3 SET out=C
IF %ecode% EQU 4 SET out=D
IF %ecode% EQU 5 SET out=E
IF %ecode% EQU 6 SET out=F
IF %ecode% EQU 7 SET out=G
IF %ecode% EQU 8 SET out=H
IF %ecode% EQU 9 SET out=I
IF %ecode% EQU 10 SET out=J
IF %ecode% EQU 11 SET out=K
IF %ecode% EQU 12 SET out=L
IF %ecode% EQU 13 SET out=M
IF %ecode% EQU 14 SET out=N
IF %ecode% EQU 15 SET out=O
IF %ecode% EQU 16 SET out=P
IF %ecode% EQU 17 SET out=Q
IF %ecode% EQU 18 SET out=R
IF %ecode% EQU 19 SET out=S
IF %ecode% EQU 20 SET out=T
IF %ecode% EQU 21 SET out=U
IF %ecode% EQU 22 SET out=V
IF %ecode% EQU 23 SET out=W
IF %ecode% EQU 24 SET out=X
IF %ecode% EQU 25 SET out=Y
IF %ecode% EQU 26 SET out=Z
IF %ecode% EQU 27 SET out=a
IF %ecode% EQU 28 SET out=b
IF %ecode% EQU 29 SET out=c
IF %ecode% EQU 30 SET out=d
IF %ecode% EQU 31 SET out=e
IF %ecode% EQU 32 SET out=f
IF %ecode% EQU 33 SET out=g
IF %ecode% EQU 34 SET out=h
IF %ecode% EQU 35 SET out=i
IF %ecode% EQU 36 SET out=j
IF %ecode% EQU 37 SET out=k
IF %ecode% EQU 38 SET out=l
IF %ecode% EQU 39 SET out=m
IF %ecode% EQU 40 SET out=n
IF %ecode% EQU 41 SET out=o
IF %ecode% EQU 42 SET out=p
IF %ecode% EQU 43 SET out=q
IF %ecode% EQU 44 SET out=r
IF %ecode% EQU 45 SET out=s
IF %ecode% EQU 46 SET out=t
IF %ecode% EQU 47 SET out=u
IF %ecode% EQU 48 SET out=v
IF %ecode% EQU 49 SET out=w
IF %ecode% EQU 50 SET out=x
IF %ecode% EQU 51 SET out=y
IF %ecode% EQU 52 SET out=z
IF %ecode% EQU 53 SET out=0
IF %ecode% EQU 54 SET out=1
IF %ecode% EQU 55 SET out=2
IF %ecode% EQU 56 SET out=3
IF %ecode% EQU 57 SET out=4
IF %ecode% EQU 58 SET out=5
IF %ecode% EQU 59 SET out=6
IF %ecode% EQU 60 SET out=7
IF %ecode% EQU 61 SET out=8
IF %ecode% EQU 62 SET out=9
IF %ecode% EQU 63 SET out=!
IF %ecode% EQU 64 SET out=?
IF %ecode% EQU 65 SET out=.
SET code=%out%
SET show=*
:loop
cls
choice /C ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!?.# /N /CS /M Please enter your password to continue. (Valid characters include all letters, numbers, and ! ? .) Press # to submit: %code%
SET ecode=%ERRORLEVEL%
IF %ecode% EQU 66 goto submit
IF %ecode% EQU 1 SET out=A
IF %ecode% EQU 2 SET out=B
IF %ecode% EQU 3 SET out=C
IF %ecode% EQU 4 SET out=D
IF %ecode% EQU 5 SET out=E
IF %ecode% EQU 6 SET out=F
IF %ecode% EQU 7 SET out=G
IF %ecode% EQU 8 SET out=H
IF %ecode% EQU 9 SET out=I
IF %ecode% EQU 10 SET out=J
IF %ecode% EQU 11 SET out=K
IF %ecode% EQU 12 SET out=L
IF %ecode% EQU 13 SET out=M
IF %ecode% EQU 14 SET out=N
IF %ecode% EQU 15 SET out=O
IF %ecode% EQU 16 SET out=P
IF %ecode% EQU 17 SET out=Q
IF %ecode% EQU 18 SET out=R
IF %ecode% EQU 19 SET out=S
IF %ecode% EQU 20 SET out=T
IF %ecode% EQU 21 SET out=U
IF %ecode% EQU 22 SET out=V
IF %ecode% EQU 23 SET out=W
IF %ecode% EQU 24 SET out=X
IF %ecode% EQU 25 SET out=Y
IF %ecode% EQU 26 SET out=Z
IF %ecode% EQU 27 SET out=a
IF %ecode% EQU 28 SET out=b
IF %ecode% EQU 29 SET out=c
IF %ecode% EQU 30 SET out=d
IF %ecode% EQU 31 SET out=e
IF %ecode% EQU 32 SET out=f
IF %ecode% EQU 33 SET out=g
IF %ecode% EQU 34 SET out=h
IF %ecode% EQU 35 SET out=i
IF %ecode% EQU 36 SET out=j
IF %ecode% EQU 37 SET out=k
IF %ecode% EQU 38 SET out=l
IF %ecode% EQU 39 SET out=m
IF %ecode% EQU 40 SET out=n
IF %ecode% EQU 41 SET out=o
IF %ecode% EQU 42 SET out=p
IF %ecode% EQU 43 SET out=q
IF %ecode% EQU 44 SET out=r
IF %ecode% EQU 45 SET out=s
IF %ecode% EQU 46 SET out=t
IF %ecode% EQU 47 SET out=u
IF %ecode% EQU 48 SET out=v
IF %ecode% EQU 49 SET out=w
IF %ecode% EQU 50 SET out=x
IF %ecode% EQU 51 SET out=y
IF %ecode% EQU 52 SET out=z
IF %ecode% EQU 53 SET out=0
IF %ecode% EQU 54 SET out=1
IF %ecode% EQU 55 SET out=2
IF %ecode% EQU 56 SET out=3
IF %ecode% EQU 57 SET out=4
IF %ecode% EQU 58 SET out=5
IF %ecode% EQU 59 SET out=6
IF %ecode% EQU 60 SET out=7
IF %ecode% EQU 61 SET out=8
IF %ecode% EQU 62 SET out=9
IF %ecode% EQU 63 SET out=!
IF %ecode% EQU 64 SET out=?
IF %ecode% EQU 65 SET out=.
SET code=%code%%out%
SET show=%show%*
goto loop
:submit
cls
SET password=%code%
IF %password% EQU 0cZrocks! SET result=1
IF ELSE SET result=2
IF %result% EQU 1 echo password correct
IF %result% EQU 2 echo password incorrect
timeout /T 2 /NOBREAK >nul
cls
IF %result% EQU 1 goto end
IF ELSE goto start
:end

คุณไม่ได้อธิบายรหัสและคุณเพิ่งคัดลอกรหัสนั้น นี่ไม่ใช่วิธีที่ดีในการทำเช่นนั้นเนื่องจากคุณต้องรีเฟรชหน้าจอและรหัสผ่านต้องยาว x อักขระ
Anic17

-1

อีกทางเลือกหนึ่งที่อยู่ในแนวเดียวกันกับBlorgbeardคือการใช้สิ่งต่างๆเช่น:

SET /P pw=C:\^>

การ^หลบหนีของ>เพื่อให้พร้อมต์รหัสผ่านจะมีลักษณะเหมือนพร้อมต์คอนโซล cmd มาตรฐาน


1
คำถามไม่ใช่วิธีการซ่อน / ปลอมรหัสผ่าน แต่เพื่อป้องกันไม่ให้รหัสผ่านแสดงขณะพิมพ์ ดังนั้นนี่จึงไม่ (พยายาม) ตอบคำถาม
Stephan

คำตอบที่ฉันเชื่อมโยงไม่เหมือนกัน (ซึ่งในขณะที่เขียนมี 13 upvotes) คำตอบของฉันเป็นเพียงการขยายความเพราะนี่อาจเป็นทางเลือกที่มีประโยชน์สำหรับบางคน (เนื่องจาก Blogbeard เป็นทางเลือกสำหรับฉัน) (ฉันจะเพิ่มเป็นความคิดเห็น แต่ไซต์ไม่อนุญาตให้ฉัน)
nimbell

นั่นไม่ใช่คำตอบที่ดี คุณไม่ได้ปิดบังหรือซ่อนรหัสผ่าน โปรดแสดงความคิดเห็นเมื่อคุณมีทางออกหรือคำตอบที่ดี
Anic17

-3

ฉันอ่านวิธีแก้ปัญหาทั้งหมดบนอินเทอร์เน็ตเกี่ยวกับวิธีการปิดบังรหัสผ่านในไฟล์แบตช์รหัสจากการใช้โซลูชัน hide.com และแม้แต่วิธีที่ทำให้ข้อความและพื้นหลังเป็นสีเดียวกัน โซลูชัน hide.com ใช้งานได้ดีไม่มีความปลอดภัยและใช้ไม่ได้กับ Windows 64 บิต อย่างไรก็ตามการใช้ยูทิลิตี้ Microsoft 100% มีวิธี!

ก่อนอื่นให้ฉันอธิบายการใช้งานของฉัน ฉันมีเวิร์กสเตชันประมาณ 20 เครื่องที่เข้าสู่ระบบ Windows โดยอัตโนมัติ พวกเขามีทางลัดเดียวบนเดสก์ท็อป - ไปยังแอปพลิเคชันทางคลินิก เครื่องถูกล็อคไม่สามารถคลิกขวาทำอะไรไม่ได้นอกจากเข้าถึงทางลัดเดียวบนเดสก์ท็อป บางครั้งช่างจำเป็นต้องเปิดแอปพลิเคชันการดีบักเรียกดู windows explorer และดูไฟล์บันทึกโดยไม่ต้องล็อกบัญชีผู้ใช้ autolog

นี่คือสิ่งที่ฉันได้ทำ

ทำตามที่คุณต้องการ แต่ฉันวางไฟล์แบตช์สองไฟล์ไว้ในเครือข่ายแชร์ที่คอมพิวเตอร์ที่ล็อกไว้สามารถเข้าถึงได้

โซลูชันของฉันใช้ 1 องค์ประกอบหลักของ Windows - runas ใส่ช็อตคัทบนไคลเอนต์ไปที่ runas.bat ที่คุณกำลังจะสร้าง FYI สำหรับลูกค้าของฉันฉันเปลี่ยนชื่อทางลัดเพื่อวัตถุประสงค์ในการรับชมที่ดีขึ้นและเปลี่ยนไอคอน

คุณจะต้องสร้างไฟล์แบตช์สองไฟล์

ฉันตั้งชื่อไฟล์แบตช์runas.batและDebug Support.bat

runas.bat มีรหัสต่อไปนี้:

cls
@echo off
TITLE CHECK CREDENTIALS 
goto menu

:menu
cls
echo.
echo           ....................................
echo            ~Written by Cajun Wonder 4/1/2010~
echo           ....................................
echo.
@set /p un=What is your domain username? 
if "%un%"=="PUT-YOUR-DOMAIN-USERNAME-HERE" goto debugsupport
if not "%un%"=="PUT-YOUR-DOMAIN-USERNAME-HERE" goto noaccess
echo.
:debugsupport
"%SYSTEMROOT%\system32\runas" /netonly /user:PUT-YOUR-DOMAIN-NAME-HERE\%un% "\\PUT-YOUR-NETWORK-SHARE-PATH-HERE\Debug Support.bat"
@echo ACCESS GRANTED! LAUNCHING THE DEBUG UTILITIES....
@ping -n 4 127.0.0.1 > NUL
goto quit
:noaccess
cls
@echo.
@echo.
@echo.
@echo.
@echo   \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
@echo   \\                                   \\
@echo   \\    Insufficient privileges         \\  
@echo   \\                                    \\
@echo   \\      Call Cajun Wonder             \\
@echo   \\                                    \\
@echo   \\              At                    \\
@echo   \\                                    \\
@echo   \\        555-555-5555                \\
@echo   \\                                    \\
@echo   \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
@ping -n 4 127.0.0.1 > NUL
goto quit
@pause
:quit
@exit

คุณสามารถเพิ่มได้มากที่สุดถ้า "% un%"และหากไม่ใช่ "% un%" สำหรับผู้ใช้ทั้งหมดที่คุณต้องการให้เข้าถึง @ping เป็นวิธี coonass ของฉันในการจับเวลาวินาที

เพื่อดูแลไฟล์แบตช์แรก - ค่อนข้างง่ายใช่มั้ย?

นี่คือรหัสสำหรับ Debug Support.bat:

cls
@echo off
TITLE SUPPORT UTILITIES
goto menu

:menu
cls
@echo %username%
echo.
echo           .....................................
echo            ~Written by Cajun Wonder 4/1/2010~
echo           .....................................
echo.
echo What do you want to do? 
echo.
echo [1]  Launch notepad
echo.

:choice
set /P C=[Option]? 
if "%C%"=="1" goto notepad
goto choice

:notepad
echo.
@echo starting notepad....
@ping -n 3 127.0.0.1 > NUL
start notepad
cls
goto menu

ฉันไม่ใช่คนเขียนโค้ดและเพิ่งเริ่มเข้าสู่การเขียนสคริปต์เป็นชุดเมื่อประมาณหนึ่งปีที่แล้วและในรอบนี้เกี่ยวกับวิธีที่ฉันค้นพบการปิดบังรหัสผ่านในไฟล์แบตช์นั้นยอดเยี่ยมมาก!

ฉันหวังว่าจะได้ยินว่าคนอื่นที่ไม่ใช่ฉันสามารถใช้ประโยชน์ได้บ้าง!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.