รับไดเรกทอรีที่มีสคริปต์ชุดงานที่ดำเนินการอยู่ในปัจจุบัน


30

ฉันใช้%0ในไฟล์ batch เพื่อรับไดเรกทอรีที่มีไฟล์ batch แต่ผลลัพธ์คือ: -

c:\folder1\folder2\batch.bat

ฉันต้องการเพียงไดเรกทอรีโดยไม่มีชื่อไฟล์แบทช์เช่นนี้: -

c:\folder1\folder2\

ฉันจะทำมันได้อย่างไร บางทีฉันควรกรองเส้นทาง ถ้าใช่ฉันจะทำอย่างไร


เมื่อใช้% 0 ในแบตช์ไฟล์เป็นส่วนหนึ่งของบรรทัดคำสั่งคุณควรใช้% 0 \ .. \ RestOfStuff จุดสองจุดจะย้อนกลับไปยังชื่อไฟล์
John Gardeniers

ไดเรกทอรีที่มีสคริปต์ที่เรียกใช้ในปัจจุบันนั้นไม่จำเป็นต้องเหมือนกับไดเรกทอรีการทำงานปัจจุบัน (CD)! ฉันแก้ไขคำถามตามนั้น - ตอนนี้หลีกเลี่ยงคำศัพท์ของ "ไดเรกทอรีปัจจุบัน"
chiccodoro

คำตอบ:


52
%~p0

จะคืนค่าเส้นทางเท่านั้น

%~dp0

จะส่งคืนไดรฟ์ + พา ธ

ข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้สามารถพบได้บนเว็บไซต์ของไมโครซอฟท์

ข้อมูลเกี่ยวกับไวยากรณ์นี้ยังสามารถพบได้ในวิธีใช้สำหรับคำสั่งforโดยดำเนินการfor /?บน Windows OS


2
ในฐานะที่เป็นแหล่งอ้างอิงอื่นรายการการแทนที่ตัวแปรเดียวกันจะปรากฏขึ้นเมื่อคุณพิมพ์for /?
Kevin

% ~ dp0 ให้ไดเรกทอรีของไฟล์แบตช์ที่ดำเนินการอยู่ หากไฟล์แบตช์อยู่ในไดเรกทอรีอื่นคุณจะได้รับไดเรกทอรีอื่นนั้น % CD% จะให้ไดเรกทอรีปัจจุบันกับคุณเสมอ
Mihai Danila

@MihaiDanila ไม่นั่นไม่ใช่สิ่งที่ OP ถาม
Bart De Vos

จริงๆแล้วฉันมาถึงคำถามนี้ในขณะที่ค้นหาวิธีการรับไดเรกทอรีปัจจุบัน นี่เป็นครั้งแรกที่ Google ได้รับความนิยม ชื่ออย่างชัดเจนว่าไดเรกทอรีปัจจุบันถึงแม้ว่าคุณจะถูกต้องเกี่ยวกับเนื้อหา เราทั้งคู่ถูกต้องแล้ว แต่ฉันคิดว่าฉันนอนไม่หลับและฉันก็พูดถูกกว่าคำถามที่สื่อถึงแม้ว่ามันจะเป็นไปตามที่ตั้งใจไว้ก็ตาม นี่เป็นสาเหตุที่ฉันตอบคำถามเกินกำหนด ... ชื่อคำถามควรเปลี่ยนชื่อให้ตรงกับคำถาม
หมดเวลา Danila

1
น่าจะเป็นชื่อเรื่องของบทความในการเชื่อมโยงที่จะได้รับการจัดตั้งแต่การเชื่อมโยงไม่ถูกต้องมากขึ้น .....
Rupsingh Mathwale

16

ไดเรกทอรีปัจจุบันถูกเก็บไว้ใน% CD%


4
% CD% ยึดเส้นทางที่คุณดำเนินการแบตช์จากที่ที่ไฟล์แบตช์มีอยู่
Mohammad AL-Rawabdeh

4
@ Mohammad: แน่นอนมันเป็นไดเรกทอรีปัจจุบัน อีกอันหนึ่งเป็นไดเรกทอรีที่ไฟล์แบตช์อยู่ ทั้งสองนั้นไม่เหมือนกันและคำถามของคุณจะถามอย่างชัดเจนสำหรับคำถามนี้ ดังนั้นโปรดแก้ไขหากนั่นไม่ใช่สิ่งที่คุณหมายถึง
Joey

% CD% ส่งคืนพา ธ ปัจจุบันของไฟล์แบตช์ แต่ล้มเหลวเมื่อเราเรียกใช้ไฟล์แบตช์ในฐานะผู้ดูแล เมื่อเรารันไฟล์แบตช์ในฐานะผู้ดูแลระบบก็จะส่งคืนพา ธ ของ System32 ตัวเลือกที่ดีกว่าคือการใช้% ~ dp0 สำหรับเส้นทางที่สมบูรณ์

% ~ dp0 ให้ไดเรกทอรีของไฟล์แบตช์ที่ดำเนินการอยู่ หากไฟล์แบตช์อยู่ในไดเรกทอรีอื่นคุณจะได้รับไดเรกทอรีอื่นนั้น % CD% จะให้ไดเรกทอรีปัจจุบันกับคุณเสมอ
Mihai Danila

สำหรับการอ้างอิงของผู้อ่าน - คำถามเดิมใช้คำว่า "ไดเรกทอรีปัจจุบัน" ในขณะที่ความหมายไดเรกทอรีที่มีสคริปต์ - ตอนนี้ได้รับการแก้ไข
chiccodoro

4

นิพจน์บางอย่างที่มีผลต่อชื่อไฟล์:

~f0จะให้ชื่อไฟล์ที่ผ่านการรับรองโดยสมบูรณ์
~dpnx0จะให้เหมือนกับ~f0แต่สิ่งนี้แสดงให้คุณเห็นว่าคุณสามารถแยกมันออกเป็นส่วน ๆ ได้: d = drive p = path n = name x = extension


0

ใช้คำสั่ง chdir

ตัวเลือกที่ 1:

chdir 

ตัวเลือก 2:

echo %CD%

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