เส้นทางสัมพัทธ์ในสคริปต์ BAT


130

นี่คือโฟลเดอร์โปรแกรมของฉันเองในไดรฟ์ USB ของฉัน:

Program\
     run.bat
     bin\
         config.ini
         Iris.exe
         library.dll
         etc.

ฉันต้องการใช้run.batเพื่อเริ่มต้น Iris.exe

ฉันไม่สามารถใช้สิ่งนี้: F:/Program/bin/Iris.exeเหมือนทางลัดเพราะบางครั้งมันไม่ได้แนบเป็นไดรฟ์F:( เช่น E:หรือG:)

ฉันต้องเขียนอะไรในไฟล์ bat เพื่อให้ทำงานได้โดยไม่คำนึงถึงอักษรระบุไดรฟ์

ฉันลองสิ่งนี้ในไฟล์ BAT:

"\bin\Iris.exe"

แต่มันไม่ได้ผล

คำตอบ:


275

ใช้สิ่งนี้ในไฟล์แบตช์ของคุณ:

%~dp0\bin\Iris.exe

%~dp0 แก้ไขไปยังเส้นทางแบบเต็มของโฟลเดอร์ที่มีสคริปต์ชุดงานอยู่


7
อันที่จริงสิ่งนี้แก้ไขได้บางอย่างเช่นC:\myDir\\bin\Iris.exe(สังเกตแบ็กสแลชคู่) วิธีนี้ยังใช้งานได้ แต่ทิ้งแบ็กสแลชก่อนที่ถังขยะจะ "สะอาดกว่า"? -> %~dp0bin\Iris.exe.
mozzbozz

8
@mozzbozz หากคุณสามารถรับประกันได้ว่า%~dp0จะมีแบ็กสแลชต่อท้ายคำสั่งทั้งสองเสมอ มิฉะนั้นหนึ่งที่มีแบ็กสแลชเพิ่มเติมจะเป็นตัวแปรที่ปลอดภัยกว่า
Ansgar Wiechers

4
โอเคนั่นคือประเด็น ฉันได้ทดสอบสิ่งนี้กับเครื่อง Windows 7 สองเครื่องเท่านั้นอาจแตกต่างจากที่อื่น (XP, Vista และ Windwos 8 -> ฉันไม่รู้ แต่: ตรรกะของ Microsoft และฉันไม่พบเอกสารใด ๆ เกี่ยวกับเรื่องนี้;)) แต่ผมพบว่าผมต้องใส่เครื่องหมายคำพูดรอบ ( "%~dp0\bin\Iris.exe") เป็นเส้นทางที่มีช่องว่างในนั้น :) เพียงเพื่อให้มันแน่ใจว่าการทำงานในคอมพิวเตอร์ทุกเครื่อง
mozzbozz

1
คุณสามารถมั่นใจได้ว่ามีเครื่องหมายทับด้วยและในบรรทัดถัดไปSET "scriptdir=%~dp0" IF NOT "%scriptdir:~-1%"=="\" SET "scriptdir=%scriptdir%\"ฉันเคยเห็นเหตุการณ์ที่แบ็กสแลชคู่ตรงกลางเส้นทางทำให้ซอฟต์แวร์หยุดทำงาน
LogicDaemon

40

คุณสามารถรับคุณสมบัติไฟล์ที่ต้องการทั้งหมดได้โดยใช้รหัสด้านล่าง:

FOR %%? IN (file_to_be_queried) DO (
    ECHO File Name Only       : %%~n?
    ECHO File Extension       : %%~x?
    ECHO Name in 8.3 notation : %%~sn?
    ECHO File Attributes      : %%~a?
    ECHO Located on Drive     : %%~d?
    ECHO File Size            : %%~z?
    ECHO Last-Modified Date   : %%~t?
    ECHO Parent Folder        : %%~dp?
    ECHO Fully Qualified Path : %%~f?
    ECHO FQP in 8.3 notation  : %%~sf?
    ECHO Location in the PATH : %%~dp$PATH:?
)

24

ฉันพบว่า%CD%ให้เส้นทางที่สคริปต์ถูกเรียกและไม่ใช่เส้นทางของสคริปต์อย่างไรก็ตาม%~dp0จะให้เส้นทางของสคริปต์เอง


14

คุณควรจะใช้ไดเร็กทอรีปัจจุบันได้

"% CD%" \ bin \ Iris.exe


1
สิ่งนี้จะล้มเหลวเมื่อไม่ใช่ไดเร็กทอรีปัจจุบันสิ่งProgramนี้จะเกิดขึ้นเมื่อคุณดับเบิลคลิกที่run.batจาก explorer %CD%คือไดเร็กทอรีปัจจุบัน%~dp0คือไดเร็กทอรีของแบตช์ไฟล์นั่นเอง
jeb

5

อย่างใดอย่างหนึ่ง bin\Iris.exe (ไม่มีเครื่องหมายทับ - เพราะนั่นหมายถึงเริ่มจากรากโดยตรง)
หรือ\Program\bin\Iris.exe(เส้นทางแบบเต็ม)


1
bin \ Iris.exe ใช้งานไม่ได้ :( ฉันไม่ชอบใช้รูทเพราะสักวันฉันอาจจะย้าย dir นี้ไปที่อื่นแล้วถ้าฉันถามจาก OS ถึงพา ธ สัมบูรณ์ในปัจจุบันล่ะ? และฉันจะใช้ ที่จะเริ่ม exe ใน bin?
user2083037

ฉันคิดว่าไดรฟ์ปัจจุบันน่าจะเป็นไดรฟ์ของแท่ง USB และโฟลเดอร์ปัจจุบันจะเป็น\Program- ใช่หรือไม่ คุณสามารถแสดงด้วยcdคำสั่งง่ายๆในบรรทัดก่อนที่คุณจะพยายามเรียกใช้. exe
AjV Jsy

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