Bagaimana cara menjalankan file batch dari jaringan berbagi tanpa pesan "jalur UNC tidak didukung"?

88

Saya mencoba menjalankan file batch dari jaringan bersama, tetapi saya terus mendapatkan pesan berikut: "Jalur UNC tidak didukung. Default ke direktori Windows." File batch berada di \\Server\Soft\WPX5\install.bat. Saat masuk sebagai administrator, dari Desktop Windows 7 saya, saya menavigasi ke \\Server\Soft\WP15\dan klik dua kali pada install.bat, saat itulah saya mendapatkan "jalur UNC tidak didukung." pesan. Saya menemukan beberapa saran online yang menyatakan bahwa drive pemetaan tidak akan berfungsi, tetapi menggunakan tautan simbolis akan menyelesaikan masalah ini, tetapi tautan simbolis tidak berfungsi untuk saya. Di bawah ini adalah konten file batch saya, saya sangat menghargai bantuan apa pun yang dapat membantu saya mencapai apa yang saya coba lakukan. Pada dasarnya, saya ingin menjalankan file batch dari \\Server\Soft\WP15\install.bat.

Konten file batch

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

Juga, bagaimana cara menghapus tautan simbolis setelah penginstalan selesai?

rebus
sumber
2
Bertahun-tahun kemudian, tetapi mungkin berguna bagi orang lain: Setelah membuat tautan simbolis, mengapa Anda terus merujuk ke jalur asli? Inti dari tautan simbolis adalah memberi Anda jalur lokal yang bisa Anda gunakan. Misalnya, jangan katakan "\\ server \ soft \ WP15 \ setup.exe", katakan "% userprofile% \ Desktop \ WP15 \ setup.exe
ToolmakerSteve
serius ini adalah pertanyaan ServerFault.com
Junchen Liu

Jawaban:

137

PUSHD dan POPD akan membantu dalam kasus Anda.

@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

Ketik PUSHD /?dari baris perintah untuk informasi lebih lanjut.

dbenham
sumber
2
Terima kasih atas tanggapan dan saran yang cepat. Saya berharap saran Anda akan berhasil, tetapi sayangnya itu tidak berhasil untuk saya. Saya mendapat pesan yang sama: "... jalur UNC tidak didukung. Default ke direktori Windows." Saya juga mendapat kotak dialog Kontrol Akun Pengguna untuk mengklik Ya atau Tidak, meskipun saya menjalankan file saat masuk sebagai anggota grup administrator.
Rebus
26
@Stew Pada awal file .bat Anda, letakkan: pushd %~dp0Itu akan membuatnya mengubah direktori ke direktori yang berisi file bat Anda. Ini masih akan mencetak peringatan, tetapi kemudian akan berfungsi seperti biasa. Jika file bat menggunakan '% ~ dp0' di tempat lain, mungkin ada masalah dengan itu, dalam hal ini, Anda dapat mendeteksi jika %~dp0dimulai dengan '//' di awal file bat, dan jika demikian,, pushdlalu jalankan bat file lagi, lalu goto :EOF. Ini akan membuatnya berjalan di direktori yang baru dipetakan.
Grant Peters
akankah cmd dijalankan di komputer jarak jauh atau lokal?
Dingxin Xu
@DingxinXu - Kode jarak jauh akan berjalan secara lokal. Jika Anda ingin menjalankan kode di komputer jarak jauh, maka Anda memerlukan sesuatu seperti PsExec .
dbenham
3
@ Balki - Ya, letakkan perintah jarak jauh di skrip lain. Setelah itu PUSHD, jalankan skrip ke-2 via CMD /C, dan ikuti dengan POPD. Kontrol akan kembali ke skrip induk setelah CMD /Cskrip keluar, meskipun dihentikan oleh CTRL-C.
dbenham
29

Ada pengaturan registri untuk menghindari pemeriksaan keamanan ini (meskipun demikian, gunakan dengan risiko Anda sendiri):

Di bawah jalur registri

   HKEY_CURRENT_USER
     \ Software
       \ Microsoft
         \ Command Processor

tambahkan nilai DisableUNCCheck REG_DWORD dan atur nilainya menjadi 0 x 1 (Hex).

Catatan: Pada Windows 10 versi 1803, pengaturan tampaknya berada di bawah HKLM: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Command Processor

Vinzz
sumber
1
Tidak yakin mengapa tetapi saya menemukan folder "Command Processor" saya di bawah jalur berikut: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Command Processor
aoh
Terima kasih, ini membantu. Tetapi pada Windows 10 1803, ini adalah HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Command Processor, seperti yang ditunjukkan @aoh.
Edwin Yip
Saya akan memperbarui jawabannya kemudian; terima kasih atas ketepatannya
Vinzz
26

Saya merasa clsadalah jawaban terbaik. Ini menyembunyikan pesan UNC sebelum siapa pun dapat melihatnya. Saya menggabungkannya dengan @pushd %~dp0kanan setelahnya sehingga akan tampak seperti membuka skrip dan memetakan lokasi dalam satu langkah, sehingga mencegah masalah UNC lebih lanjut.

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

Catatan:

pushd akan mengubah direktori kerja Anda ke lokasi skrip di drive baru yang dipetakan.

popd pada akhirnya, untuk membersihkan drive yang dipetakan.

Grallen
sumber
4
Saya membutuhkan popddi bagian akhir (Windows 7), jika tidak, drive yang dipetakan macet setelah jendela ditutup.
Patrick
1
Bekerja dengan baik. Terima kasih.
Jonas_Hess
1
Jika harus bekerja pada Windows 10. Ini masih "Command Prompt".
Grallen
11

Pada dasarnya, Anda tidak dapat menjalankannya dari jalur UNC tanpa melihat pesan itu.

Yang biasanya saya lakukan hanyalah meletakkan a CLSdi bagian atas skrip jadi saya tidak perlu melihat pesan itu. Kemudian, tentukan jalur lengkap ke file di berbagi jaringan yang perlu Anda gunakan.

aphoria
sumber
1
Terima kasih. Saya akan mencoba ini sebagai opsi terakhir, jika tidak ada solusi lain.
Rebus
Jawaban @jameslr akan berhasil, tetapi ini lebih banyak pekerjaan (mengetik) daripada yang biasanya saya lakukan. Jadi, hanya membersihkan layar untuk menghilangkan kesalahan sudah cukup bagi saya. :)
aphoria
8

Saya hanya perlu dapat menjelajah Windows Explorer melalui berbagi server, lalu klik dua kali meluncurkan file batch. @dbenham membawa saya ke solusi yang lebih mudah untuk skenario saya (tanpa popdkekhawatiran):

:: 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
JayRO-GreyBeard
sumber
@ peter-mortensen, mengedit komentar di skrip 4x untuk menggunakan huruf besar pada kata pertama? Layak untuk diedit? Mengapa tidak memberi titik di akhir untuk menjadikannya kalimat? Bagaimana dengan: karena ini hanya komentar, saya sengaja TIDAK menggunakan huruf besar pada kata pertama di komentar KECUALI di appreviations dan variabel (atau penekanan) untuk pemahaman yang lebih jelas.
JayRO-GreyBeard
4

Alih-alih meluncurkan batch langsung dari explorer - buat pintasan ke batch dan setel direktori awal di properti pintasan ke jalur lokal seperti% TEMP% atau semacamnya.

Untuk menghapus tautan simbolik, gunakan perintah rmdir.

jameslr
sumber
1
Ini akan berfungsi, tetapi hanya jika Anda ingin meluncurkan dari pintasan. Ini tidak akan membantu jika Anda ingin menjalankan dari baris perintah atau memanggil dari file batch lain.
aphoria
2
Jika Anda ingin menelepon dari batch atau baris perintah lain, Anda dapat memanggil seperti ini: start / d% TEMP% \\ Server \ Soft \ WP15 \ install.bat
jameslr
2

Saya mengalami masalah yang sama baru-baru ini bekerja dengan file batch pada drive berbagi jaringan di Windows 7.

Cara lain yang berhasil bagi saya adalah memetakan server ke drive melalui Windows Explorer: Tools -> Map network drive. Berikan huruf drive dan jalur folder ke \ server Anda. Karena saya bekerja dengan berbagi jaringan yang sering memetakannya membuatnya lebih nyaman, dan menyelesaikan kesalahan "jalur UNC tidak didukung".

Kai
sumber
2

Situasi saya hanya sedikit berbeda. Saya menjalankan file batch saat memulai untuk mendistribusikan versi terbaru aplikasi bisnis internal.

Dalam situasi ini saya menggunakan Windows Registry Run Key dengan string berikut

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

Ini menjalankan dua perintah saat startup dalam urutan yang benar. Pertama-tama menyalin file batch secara lokal ke direktori yang izinnya dimiliki pengguna. Kemudian menjalankan file batch yang sama. Saya dapat membuat direktori lokal c: \ InternalApps dan menyalin semua file dari jaringan.

Ini mungkin terlambat untuk menjawab pertanyaan pembuat poster asli tetapi mungkin membantu orang lain.

James
sumber
1

Ini adalah RegKey yang saya gunakan:

Windows Registry Editor Version 5.00

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

Ini adalah utas yang sangat lama, tetapi saya masih menggunakan Windows 7. :-)

Ada satu hal yang tampaknya tidak diperhitungkan oleh siapa pun, yang mungkin juga akan membantu pengguna Windows 10.

Jika Ekstensi Perintah diaktifkan, perintah PUSHD menerima jalur jaringan selain huruf dan jalur drive normal.

Jadi jawaban yang jelas - dan paling sederhana - mungkin untuk mengaktifkan ekstensi perintah dalam skrip batch, jika Anda bermaksud menggunakan PUSHD. Paling tidak, ini harus mengurangi masalah yang mungkin Anda alami dalam menggunakan PUSHD dengan jalur jaringan.

Ed999
sumber
0

Saya env windows10 2019 versi lts dan saya menambahkan dua data binray ini, perbaiki kesalahan ini

Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command ProcessorDisableUNCCheck nilai 1 Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Command Processor DisableUNCCheck nilai 1

Zhui Wang
sumber
-1

Mengedit registri Windows tidak sepadan dan tidak aman, gunakan Map network drivedan muat berbagi jaringan seolah-olah dimuat dari salah satu drive lokal Anda.

masukkan deskripsi gambar di sini

Adham Sabry
sumber
1
Apa bedanya dengan jawaban Kai ?
SomethingDark
Saya tidak menyadarinya tbh, mungkin tangkapan layar bernilai ribuan kata yang membuat perbedaan?
Adham Sabry