ฉันรู้ว่า%0
มีเส้นทางแบบเต็มของสคริปต์ชุดเช่นc:\path\to\my\file\abc.bat
ฉันจะpath
เท่ากับc:\path\to\my\file
ฉันจะบรรลุสิ่งนั้นได้อย่างไร
ฉันรู้ว่า%0
มีเส้นทางแบบเต็มของสคริปต์ชุดเช่นc:\path\to\my\file\abc.bat
ฉันจะpath
เท่ากับc:\path\to\my\file
ฉันจะบรรลุสิ่งนั้นได้อย่างไร
คำตอบ:
%~dp0
จะเป็นไดเรกทอรี นี่คือเอกสารบางส่วนของตัวดัดแปลงเส้นทางทั้งหมด สิ่งที่สนุก :-)
หากต้องการลบเครื่องหมายแบ็กสแลชสุดท้ายคุณสามารถใช้:n,m
ไวยากรณ์สตริงย่อยดังนี้:
SET mypath=%~dp0
echo %mypath:~0,-1%
ฉันไม่เชื่อว่ามีวิธีรวม%0
ไวยากรณ์กับ:~n,m
ไวยากรณ์ แต่น่าเสียดายที่
%~0\..
- รู้ว่าต้องมีวิธีที่ดีกว่า! นอกจากนี้คุณอาจต้องการใส่%~dp0
เครื่องหมายอัญประกาศคู่ ( ""
) ในกรณีที่มีช่องว่างในชื่อไดเรกทอรี ฯลฯ
%~dp0
มี `` ในตอนท้าย คุณมีความคิดวิธีลบออกหรือไม่
SET msg=hello world
งานได้ดี) อย่างไรก็ตามเมื่อใช้% mypath% ที่อื่นคุณต้องระวังในการใช้เครื่องหมายคำพูดแม้ว่าจะไม่จำเป็นสำหรับcd
ทั้งสองก็ตาม
คุณสามารถใช้สคริปต์ต่อไปนี้เพื่อรับเส้นทางโดยไม่ต้องต่อท้าย "\"
for %%i in ("%~dp0.") do SET "mypath=%%~fi"
%~dp0
อาจเป็นเส้นทางญาติ หากต้องการแปลงเป็นเส้นทางแบบเต็มให้ลองดังนี้:
pushd %~dp0
set script_dir=%CD%
popd
%~dp0
โดยตรง
%~dp0
สามารถเป็นญาติซึ่งอาจจะใช่หรือไม่ใช่ปัญหาขึ้นอยู่กับกรณีการใช้งาน
%~dp0
ไม่สามารถมีพา ธ สัมพัทธ์d
ย่อมาจากไดรฟ์และp
สำหรับพา ธ ไดรฟ์อาจสัมพันธ์กันอย่างไร
%~dp0
ว่าเป็นเส้นทางที่แน่นอนแม้ว่าสคริปต์จะทำงานเป็นเส้นทางสัมพัทธ์ ขอบคุณที่คอมเม้นท์ของ jeb ฉันไม่ได้ถูกหลอกด้วยคำตอบนี้ ทำไมผู้คนถึงทำสิ่งต่าง ๆ ขึ้นมาและเริ่มแพร่กระจายจินตนาการของพวกเขาไปสู่ผู้อื่น ฉันมีเพื่อนร่วมงานคนนี้ที่ทำสิ่งนี้ แต่ฉันโทษอายุ (เด็ก) ของเขา ฉันหวังว่าคะแนนโหวตของฉันจะถูกนับ
คุณสามารถใช้%~dp0
, d หมายถึงไดรฟ์เท่านั้น, p หมายถึงพา ธ เท่านั้น, 0 คืออาร์กิวเมนต์สำหรับชื่อไฟล์แบบเต็มของไฟล์แบตช์
ตัวอย่างเช่นหากเส้นทางของไฟล์คือ C: \ Users \ Oliver \ Desktop \ example.bat ดังนั้นอาร์กิวเมนต์จะเท่ากับ C: \ Users \ Oliver \ Desktop \ นอกจากนี้คุณยังสามารถใช้คำสั่งset cpath=%~dp0 && set cpath=%cpath:~0,-1%
และใช้%cpath%
ตัวแปรเพื่อลบเครื่องหมายสแลชต่อท้าย
%cd%
จะให้เส้นทางของไดเรกทอรีจากที่สคริปต์ทำงาน
เพิ่งรัน:
echo %cd%
%CD%
เป็นโฟลเดอร์การทำงานปัจจุบันไม่ใช่โฟลเดอร์ที่จัดเก็บไฟล์แบตช์ พวกเขาสามารถเป็นสถานที่เดียวกัน แต่บ่อยครั้งที่พวกเขาไม่ได้
นั่นจะเป็น%CD%
ตัวแปร
@echo off
echo %CD%
%CD%
ส่งคืนไดเร็กทอรีปัจจุบันที่สคริปต์แบตช์อยู่
CD C:\Temp <CR> ECHO %CD%
(ขึ้น<CR>
บรรทัดใหม่ ... )
ฉันกำลังทำงานกับเครื่อง Windows 7 และฉันได้ลงเอยด้วยการใช้บรรทัดด้านล่างเพื่อรับเส้นทางโฟลเดอร์แบบสมบูรณ์สำหรับสคริปต์ทุบตีของฉัน
ฉันได้ไปแก้ปัญหานี้หลังจากที่กำลังมองหาที่http://www.linuxjournal.com/content/bash-parameter-expansion
#Get the full aboslute filename.
filename=$0
#Remove everything after \. An extra \ seems to be necessary to escape something...
folder="${filename%\\*}"
#Echo...
echo $filename
echo $folder