ฉันต้องการสร้างไฟล์แบทช์สองสามตัวเพื่อสร้างโปรแกรมอัตโนมัติ
คำถามของฉันคือเมื่อฉันสร้างไฟล์แบตช์ไดเรกทอรีปัจจุบันคืออะไร? มันเป็นไดเรกทอรีที่เป็นที่ตั้งของไฟล์หรือเป็นไดเรกทอรีเดียวกันที่ปรากฏในพรอมต์คำสั่งหรืออย่างอื่น?
ฉันต้องการสร้างไฟล์แบทช์สองสามตัวเพื่อสร้างโปรแกรมอัตโนมัติ
คำถามของฉันคือเมื่อฉันสร้างไฟล์แบตช์ไดเรกทอรีปัจจุบันคืออะไร? มันเป็นไดเรกทอรีที่เป็นที่ตั้งของไฟล์หรือเป็นไดเรกทอรีเดียวกันที่ปรากฏในพรอมต์คำสั่งหรืออย่างอื่น?
คำตอบ:
จากภายในไฟล์แบทช์ของคุณ:
%cd%
อ้างถึงไดเรกทอรีทำงานปัจจุบัน (ตัวแปร)%~dp0
อ้างถึงเส้นทางแบบเต็มไปยังไดเรกทอรีของแบตช์ไฟล์ (คงที่)%~dpnx0
และ%~f0
ทั้งคู่อ้างถึงพา ธ เต็มไปยังไดเรกทอรีแบตช์และชื่อไฟล์ (คงที่)ดูเพิ่มเติม: % ~ dp0 หมายถึงอะไรและทำงานอย่างไร
.cmd
ไฟล์และเรียกใช้ในฐานะผู้ดูแลระบบ%cd%
จะให้C:\WINDOWS\system32
และ%~dp0
มอบไดเรกทอรีไฟล์แบตช์ที่มีเครื่องหมายสแลชต่อท้าย
โดยปกติจะเป็นไดเรกทอรีที่ไฟล์แบตช์เริ่มต้น แต่ถ้าคุณเริ่มไฟล์แบตช์จากทางลัดไดเรกทอรีเริ่มต้นที่แตกต่างกันอาจได้รับ นอกจากนี้เมื่อ you'r ใน cmd และไดเรกทอรีปัจจุบันของคุณคือc:\dir3
คุณยังสามารถเริ่มต้นแฟ้มชุดใช้ซึ่งในกรณีนี้ไดเรกทอรีปัจจุบันจะc:\dir1\dir2\batch.bat
c:\dir3
ในแฟ้มแบตช์% cd% เป็นคำสั่งที่ใช้บ่อยที่สุดสำหรับไดเรกทอรีปัจจุบันแม้ว่าคุณจะสามารถตั้งค่าตัวแปรของคุณเอง:
set mypath=%cd%
echo %mypath% (where %mypath% is the current directory that the batch file is sitting in)
ถ้าคุณต้องการเปิด Myprog.exe หากอยู่ในโฟลเดอร์เดียวกันคุณจะใช้คำสั่ง:
start %mypath%\Myprog.exe
ที่จะเปิด Myprog จากโฟลเดอร์ปัจจุบัน
ตัวเลือกอื่นคือสร้างไดเรกทอรีใน C: เรียกว่า AutomatePrograms จากนั้นคุณถ่ายโอนไฟล์ของคุณไปยังโฟลเดอร์นั้นจากนั้นคุณสามารถเปิดได้โดยใช้คำสั่งต่อไปนี้:
start "" "C:\AutomatePrograms\Myprog1.exe"
start "" "C:\AutomatePrograms\Myprog2.exe"
start "" "C:\AutomatePrograms\Myprog3.exe"
%cd%
เป็นตัวแปรดังนั้นการเรียกใช้ไฟล์แบตช์จาก Windows Explorer ในฐานะผู้ดูแลระบบจะให้C:\WINDOWS\system32
ซึ่งเกือบจะไม่แน่นอนสิ่งที่คุณต้องการ %~dp0
มีความสอดคล้องมากขึ้น
สมมติว่าคุณกำลังเปิดไฟล์ในไดเรกทอรีปัจจุบันของคุณ คำสั่งจะเป็น:
start %cd%\filename.filetype
ฉันหวังว่าฉันจะตอบคำถามของคุณ
มันเป็นไดเรกทอรีจากที่คุณเรียกใช้คำสั่งเพื่อรันไฟล์แบตช์ของคุณ
ดังที่กล่าวไว้ในคำตอบข้างต้นคุณสามารถเพิ่มคำสั่งด้านล่างลงในสคริปต์ของคุณเพื่อตรวจสอบ:
> set current_dir=%cd%
> echo %current_dir%
มันเป็นไดเรกทอรีที่คุณเริ่มแบตช์ไฟล์ เช่นถ้าชุดของคุณอยู่ในc:\dir1\dir2
และคุณแล้วใช้ชุดไดเรกทอรีปัจจุบันจะมีcd c:\dir3
c:\dir3
แค่ 2 เซ็นต์ของฉัน คำสั่งต่อไปนี้ล้มเหลวหากเรียกจากไฟล์แบตช์ (Windows 7) ที่อยู่ใน pendrive:
xcopy /s /e /i %cd%Ala C:\KS\Ala
แต่นี่ทำงานได้:
xcopy /s /e /i %~dp0Ala C:\KS\Ala
%~dp0
%0
จะให้ชื่อของ subroutine ปัจจุบัน แต่%~dp0
จะเสมอให้เส้นทางที่เต็มไปด้วยแฟ้มชุดการดำเนินการ