ฉันรู้ว่า%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