2010-09-29 43 views
5

Tôi gặp sự cố khi gọi tệp lô từ tệp lô khác khi cố gắng chạy mọi thứ bằng cách sử dụng Process.Start. Về cơ bản tôi gọi việc thực hiện một tập tin thực thi từ chương trình C# của tôi trông giống như sau:Bao gồm tệp lô trong tệp lô


call include.bat 

//execute the rest of the batch file here 

Tập tin include.bat thiết lập đường dẫn và có thể được sử dụng bởi một số tệp lô khác. Khi tôi chạy Process.Start đôi khi công trình này và đôi khi tôi nhận được ERROR: cannot find include.bat. Trước hết, bất kỳ ý tưởng nào tại sao điều này xảy ra? Và các ý tưởng về cách sửa lỗi này từ tập tin batch?

Trả lời

7

Để chuyển sang thư mục tập tin thực thi của bạn nằm ở, sử dụng này:

cd %~dp0 

Tôi làm điều này trong hầu hết các kịch bản thực thi của tôi. Bằng cách đó, đường dẫn tương đối phải luôn hoạt động.

+0

cảm ơn vì điều đó – Dimitris

+0

Bạn có thể đánh dấu nó là câu trả lời nếu nó giải quyết được vấn đề của bạn. :) – Botz3000

+1

Tôi thường đặt một var sao cho tập lệnh dễ đọc hơn: SET CDIR =% ~ dp0 – djangofan

1

Điều đầu tiên tôi muốn thử là sử dụng thông tin đường dẫn đầy đủ trong câu lệnh gọi cho include.bat. Nếu điều đó sửa chữa nó, bạn có thể chỉ không chạy tập tin thực thi từ vị trí thích hợp. Tôi chắc rằng có một "thư mục làm việc" khả năng trong C#, tôi chỉ không chắc chắn nó là gì.

1

Bạn có đặt ProcessStartInfo.WorkingDirectory (http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.workingdirectory.aspx) trên ProcessStartInfo mà bạn chuyển sang Process.Start không?

Vì đôi khi không thể tìm thấy include.bat, thư mục làm việc có thể sai (không phải thư mục chứa include.bat).

+0

Tôi phải thừa nhận rằng tôi không làm điều đó. Có cách nào để sửa chữa nó ít nhất là tạm thời từ tập tin thực thi? – Dimitris

+0

Sử dụng cd% ~ dp0 như đã nêu trong Botz3000 ở trên. –

+0

cảm ơn vì điều đó – Dimitris

2

Trước kịch bản, hãy thử CD /D %~dp0

+1

Quyền của bạn có thể. CD có thể không hoạt động nếu nó có nghĩa là chuyển sang một ký tự ổ đĩa khác nhau nhưng với chuyển đổi/D, có thể nó sẽ. Tôi đã không thử nó nhưng đó là một ý tưởng tốt ... – djangofan

2

Tôi biết đây là một câu hỏi cũ nhưng tôi nghĩ rằng nó sẽ là đáng chú ý là phương pháp thúc đẩy bởi các câu trả lời được chấp nhận (ví dụ: thay đổi thư mục làm việc) có thể không phải lúc nào là thích hợp.

Một tốt hơn chung cách tiếp cận là để ám chỉ phụ thuộc bởi đường dẫn đầy đủ:

call "%~dp0include.bat" 

(Từ% ~ dp0 đã kết thúc với một dấu gạch chéo, chúng tôi không cần phải thêm một số khác.)

Dưới đây là một số lợi ích của không thay đổi thư mục làm việc:

  1. Phần còn lại của tệp lô vẫn có thể sử dụng thư mục làm việc ban đầu.
  2. Thư mục làm việc ban đầu trong dấu nhắc lệnh được giữ nguyên, ngay cả khi không có "SETLOCAL".
  3. Nếu tệp lô đầu tiên được chạy qua đường dẫn UNC (chẳng hạn như "\\ server \ share \ file.bat"), lệnh gọi đường dẫn đầy đủ sẽ thành công khi changing the directory (even with "cd /d") will fail. (Sử dụng pushd/popd sẽ xử lý điểm này, nhưng chúng có các vấn đề riêng của mình.)

Những lợi ích này đặc biệt quan trọng đối với các tệp lô bí danh, ngay cả khi chúng không quan trọng đối với tình huống cụ thể thúc đẩy câu hỏi này.

Các vấn đề liên quan