Làm cách nào để chạy tệp hàng loạt từ chia sẻ mạng mà không có thông báo "Đường dẫn UNC không được hỗ trợ"?


87

Tôi đang cố gắng chạy một tệp hàng loạt từ một mạng chia sẻ, nhưng tôi tiếp tục nhận được thông báo sau: "Đường dẫn UNC không được hỗ trợ. Mặc định là thư mục Windows." Tệp lô nằm trên \\Server\Soft\WPX5\install.bat. Trong khi đăng nhập với tư cách quản trị viên, từ Máy tính để bàn Windows 7, tôi điều hướng đến \\Server\Soft\WP15\và nhấp đúp vào install.bat, đó là khi tôi nhận được thông báo "Đường dẫn UNC không được hỗ trợ." thông điệp. Tôi tìm thấy một số đề xuất trực tuyến nói rằng ổ đĩa ánh xạ sẽ không hoạt động, nhưng sử dụng liên kết tượng trưng sẽ giải quyết vấn đề này, nhưng liên kết tượng trưng không hoạt động đối với tôi. Dưới đây là nội dung tệp hàng loạt của tôi, tôi đánh giá cao bất kỳ sự hỗ trợ nào có thể giúp tôi hoàn thành những gì tôi đang cố gắng thực hiện. Về cơ bản, tôi muốn có thể chạy tệp loạt từ \\Server\Soft\WP15\install.bat.

Nội dung tệp hàng loạt

mklink /d %userprofile%\Desktop\WP15 \\server\soft\WP15
\\server\soft\WP15\setup.exe
robocopy.exe "\\server\soft\WP15\Custom" /copyall "C:\Program Files (x86)\WP\Custom Templates"
Regedit.exe /s \\server\soft\WPX5\Custom\Migrate.reg

Ngoài ra, làm cách nào để xóa liên kết tượng trưng sau khi cài đặt xong?


2
Nhiều năm sau, nhưng có thể hữu ích với người khác: Sau khi tạo liên kết tượng trưng, ​​tại sao bạn tiếp tục tham chiếu đến đường dẫn ban đầu? Điểm của liên kết tượng trưng là cung cấp cho bạn một đường dẫn cục bộ mà bạn có thể sử dụng thay thế. Ví dụ như không nói "\\ server \ soft \ WP15 \ setup.exe", nói "% userprofile% \ Desktop \ WP15 \ setup.exe
ToolmakerSteve

nghiêm túc này là một câu hỏi ServerFault.com
Junchen Liu

Câu trả lời:


137

PUSHD và POPD sẽ giúp ích trong trường hợp của bạn.

@echo off
:: Create a temporary drive letter mapped to your UNC root location
:: and effectively CD to that location
pushd \\server\soft

:: Do your work
WP15\setup.exe
robocopy.exe "WP15\Custom" /copyall "C:\Program Files (x86)\WP\Custom Templates"
Regedit.exe /s WPX5\Custom\Migrate.reg

:: Remove the temporary drive letter and return to your original location
popd

Nhập PUSHD /?từ dòng lệnh để biết thêm thông tin.


2
Cảm ơn bạn đã phản hồi nhanh chóng và đề xuất. Tôi đã hy vọng đề xuất của bạn sẽ hiệu quả, nhưng tiếc là nó không hiệu quả với tôi. Tôi nhận được thông báo tương tự: "... Đường dẫn UNC không được hỗ trợ. Mặc định là thư mục Windows." Tôi cũng nhận được hộp thoại Kiểm soát Tài khoản Người dùng để nhấp vào Có hoặc Không, mặc dù tôi đã chạy tệp khi đăng nhập với tư cách là thành viên của nhóm quản trị viên.
Hầm

26
@Stew Ở đầu tệp .bat của bạn, hãy đặt: pushd %~dp0Điều đó sẽ giúp nó thay đổi thư mục thành thư mục chứa tệp bat của bạn. Nó sẽ vẫn in ra cảnh báo, nhưng sau đó nó sẽ hoạt động như bình thường. Nếu tệp bat sử dụng '% ~ dp0' ở nơi khác, nó có thể có vấn đề với điều đó, trong trường hợp đó, bạn có thể phát hiện xem có %~dp0bắt đầu bằng '//' ở đầu tệp bat không và nếu có, pushdsau đó chạy dơi tập tin một lần nữa, sau đó goto :EOF. Điều này sẽ làm cho nó chạy trong dir mới được ánh xạ.
Grant Peters

cmd sẽ được thực thi trên máy tính từ xa hay cục bộ?
Dingxin Xu

@DingxinXu - Mã từ xa sẽ chạy cục bộ. Nếu bạn muốn chạy mã trên máy tính từ xa, thì bạn cần một cái gì đó như PsExec .
dbenham

3
@balki - Có, hãy đặt các lệnh từ xa trong một tập lệnh khác. Sau đó PUSHD, thực thi tập lệnh thứ 2 qua CMD /Cvà làm theo điều đó với POPD. Điều khiển sẽ trở lại tập lệnh mẹ sau khi CMD /Ctập lệnh thoát, ngay cả khi nó được kết thúc bằng CTRL-C.
dbenham

29

Có một cài đặt đăng ký để tránh kiểm tra bảo mật này (mặc dù vậy, hãy tự chịu rủi ro khi sử dụng):

Theo đường dẫn đăng ký

   HKEY_CURRENT_USER
     \ Software
       \ Microsoft
         \ Command Processor

thêm giá trị DisableUNCCkiểm tra REG_DWORD và đặt giá trị thành 0 x 1 (Hex).

Lưu ý: Trên Windows 10 phiên bản 1803, cài đặt dường như nằm trong HKLM: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Command Processor


1
Không chắc tại sao nhưng tôi tìm thấy thư mục "Bộ xử lý lệnh" của mình theo đường dẫn sau: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Command Processor
aoh

Cảm ơn, nó hữu ích. Nhưng trên Windows 10 1803, đó là HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Command Processor, như @aoh đã chỉ ra.
Edwin Yip

Tôi sẽ cập nhật câu trả lời sau đó; cảm ơn vì sự chính xác
Vinzz

26

Tôi cảm thấy clslà câu trả lời tốt nhất. Nó ẩn thông báo UNC trước khi mọi người có thể nhìn thấy nó. Tôi đã kết hợp nó với một @pushd %~dp0quyền sau để nó có vẻ giống như mở tập lệnh và lập bản đồ vị trí trong một bước, do đó ngăn chặn các vấn đề UNC khác.

cls
@pushd %~dp0
:::::::::::::::::::
:: your script code here
:::::::::::::::::::
@popd

Ghi chú:

pushd sẽ thay đổi thư mục làm việc của bạn thành vị trí tập lệnh trong ổ đĩa được ánh xạ mới.

popd ở cuối, để xóa ổ đĩa được ánh xạ.


4
Tôi cần phần popdcuối (Windows 7), nếu không các ổ đĩa được ánh xạ bị kẹt xung quanh sau khi cửa sổ đóng.
Patrick

1
Hoạt động tốt. Cảm ơn bạn.
Jonas_Hess

1
Nếu hoạt động trên Windows 10. Nó vẫn là "Command Prompt".
Grallen

11

Về cơ bản, bạn không thể chạy nó từ đường dẫn UNC mà không thấy thông báo đó.

Những gì tôi thường làm chỉ là đặt CLSở đầu tập lệnh để tôi không phải nhìn thấy thông báo đó. Sau đó, chỉ định đường dẫn đầy đủ đến các tệp trong mạng chia sẻ mà bạn cần sử dụng.


1
Cảm ơn bạn. Tôi sẽ thử đây là lựa chọn cuối cùng, nếu không có giải pháp nào khác.
Hầm

Câu trả lời @jameslr sẽ hoạt động, nhưng nó là công việc (đánh máy) nhiều hơn tôi thường làm. Vì vậy, chỉ cần xóa màn hình để thoát khỏi lỗi là đủ tốt cho tôi. :)
aphoria

8

Tôi cần chỉ có thể Windows Explorer duyệt qua phần chia sẻ máy chủ, sau đó nhấp đúp vào khởi chạy tệp loạt. @dbenham đã dẫn tôi đến một giải pháp dễ dàng hơn cho kịch bản của tôi (mà không phải popdlo lắng):

:: Capture UNC or mapped-drive path script was launched from
set NetPath=%~dp0

:: Assumes that setup.exe is in the same UNC path
%NetPath%setup.exe

:: Note that NetPath has a trailing backslash ("\")
robocopy.exe "%NetPath%Custom" /copyall "C:\Program Files (x86)\WP\Custom Templates"
Regedit.exe /s %NetPath%..\WPX5\Custom\Migrate.reg

:: I am not sure if WPX5 was typo, so use ".." for parent directory
set NetPath=
pause

@ peter-mortensen, đã sửa các chú thích trong script 4x để viết hoa từ đầu tiên? Đáng để chỉnh sửa? Tại sao không đặt một dấu chấm ở cuối để biến nó thành một câu? Làm thế nào về: bởi vì nó chỉ là một nhận xét, tôi cố ý KHÔNG sử dụng chữ hoa trong từ đầu tiên trong các nhận xét NGOẠI TRỪ trong lời tán thưởng và biến (hoặc nhấn mạnh) để hiểu rõ hơn.
JayRO-GreyBeard,

4

Thay vì khởi chạy lô trực tiếp từ explorer - hãy tạo lối tắt cho lô và đặt thư mục bắt đầu trong thuộc tính của phím tắt thành một đường dẫn cục bộ như% TEMP% hoặc thứ gì đó.

Để xóa liên kết tượng trưng, ​​hãy sử dụng lệnh rmdir.


1
Điều này sẽ hoạt động, nhưng chỉ khi bạn muốn khởi chạy từ một phím tắt. Nó sẽ không hữu ích nếu bạn muốn chạy từ một dòng lệnh hoặc cuộc gọi từ một tệp hàng loạt khác.
aphoria

2
Nếu bạn muốn gọi từ một lô hoặc dòng lệnh bạn có thể gọi như thế này: start / d% TEMP% \\ server \ Soft \ WP15 \ install.bat
jameslr

2

Gần đây, tôi đã gặp phải vấn đề tương tự khi làm việc với tệp hàng loạt trên ổ đĩa chia sẻ mạng trong Windows 7.

Một cách khác hiệu quả với tôi là ánh xạ máy chủ tới một ổ đĩa thông qua Windows Explorer: Công cụ -> Bản đồ ổ đĩa mạng. Cung cấp cho nó một ký tự ổ đĩa và đường dẫn thư mục tới \ yourerver. Vì tôi làm việc với mạng chia sẻ thường ánh xạ tới nó làm cho nó thuận tiện hơn và nó đã giải quyết được lỗi "đường dẫn UNC không được hỗ trợ".


2

Tình hình của tôi chỉ hơi khác một chút. Tôi đang chạy một tệp hàng loạt khi khởi động để phân phối phiên bản mới nhất của các ứng dụng nội bộ dành cho doanh nghiệp.

Trong tình huống này, tôi đang sử dụng Khóa chạy Windows Registry với chuỗi sau

cmd /c copy \\serverName\SharedFolder\startup7.bat %USERPROFILE% & %USERPROFILE%\startup7.bat

Thao tác này chạy hai lệnh khi khởi động theo đúng trình tự. Trước tiên, sao chép cục bộ tệp hàng loạt vào một thư mục mà người dùng có quyền. Sau đó thực hiện cùng một tập tin hàng loạt Tôi có thể tạo một thư mục cục bộ c: \ InternalApps và sao chép tất cả các tệp từ mạng.

Đây có lẽ là quá muộn để giải quyết câu hỏi của người đăng ban đầu nhưng nó có thể giúp ích cho người khác.


1

Đây là RegKey tôi đã sử dụng:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor]
"DisableUNCCheck"=dword:00000001

0

Phiên bản env windows10 2019 lts của tôi và tôi thêm hai dữ liệu binray này, sửa lỗi này

Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command ProcessorDisableUNCheck value 1 Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Command Processor DisableUNKiểm tra giá trị 1


0

Đây là một chủ đề rất cũ, nhưng tôi vẫn sử dụng Windows 7. :-)

Có một điểm mà dường như không ai tính đến, điều này có lẽ cũng sẽ giúp ích cho người dùng Windows 10.

Nếu Tiện ích mở rộng lệnh được bật, lệnh PUSHD chấp nhận đường dẫn mạng ngoài ký tự ổ đĩa và đường dẫn thông thường.

Vì vậy, câu trả lời rõ ràng - và đơn giản nhất - có thể là bật các phần mở rộng lệnh trong tập lệnh lô, nếu bạn định sử dụng PUSHD. Ít nhất, điều này phải làm giảm các vấn đề bạn có thể gặp phải khi sử dụng PUSHD với đường dẫn mạng.


-1

Chỉnh sửa sổ đăng ký Windows không đáng và không an toàn, hãy sử dụng Map network drivevà tải chia sẻ mạng như thể nó được tải từ một trong các ổ đĩa cục bộ của bạn.

nhập mô tả hình ảnh ở đây


1
Điều này khác với câu trả lời của Kai như thế nào?
SomethingDark

Tôi đã không nhận thấy nó tbh, có lẽ ảnh chụp màn hình có giá trị một nghìn từ tạo ra sự khác biệt?
Adham Sabry
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.