Windows command prompt - Dapatkan folder Dokumen pengguna yang dipindahkan

8

Saya mencoba menulis skrip kumpulan sederhana yang menyalin beberapa file dari %userprofile%\Documentsdirektori. Saya menguji skrip di komputer saya, tetapi setelah beberapa kegagalan saya menyadari bahwa saya memindahkan data pengguna saya ke partisi yang terpisah . Oleh karena itu, %userprofile%\Documentsadalah kosong , dan (jelas) tidak ada yang disalin.

Saya sudah mencoba variabel lingkungan lain seperti %homedrive%dan %homepath%, tetapi mereka masih menunjuk pada standarC:\...

Apakah ada cara untuk mengetahui drive aktual yang digunakan untuk data pengguna?

Saya menggunakan Windows 10.

Terima kasih!

EDIT

Seperti yang ditunjukkan oleh Ƭᴇcʜιᴇ007, saya tidak memindahkan data pengguna ke partisi lain, tetapi saya baru saja memindahkan folder "utama" (Dokumen, Video, ...) ke beberapa folder yang sesuai di partisi lain: klik kanan pada (mis. ) Dokumen, Properti, Path.

Bagaimana saya bisa mengetahui jalur folder Dokumen yang telah dipindahkan dengan cara ini?

Alessandro
sumber
2
% userprofile% harus memiliki folder yang tepat di mana pun Anda meletakkannya, selama Anda memindahkan folder profil dengan benar, itu harus akurat. Jadi, bagaimana tepatnya Anda memindahkannya ke partisi lain?
Ƭᴇcʜιᴇ007
Ok, jujur ​​saya tidak ingat, jadi saya melihat-lihat sedikit dan akhirnya saya tahu apa yang saya lakukan. Saya mengklik kanan pada folder "utama" (Dokumen, Video, dll.), Properti yang dipilih, memilih tab Path dan mengubah path. (Saya menggunakan versi Italia Windows, dan karena saya hampir tidak menerjemahkan nama yang saya lihat di layar saya, beberapa kata mungkin berbeda). Jadi Anda benar,% userprofile% secara akut tidak melakukan kesalahan. Tetapi pertanyaannya tetap: bagaimana saya bisa menemukan jalur sebenarnya dari folder Dokumen "utama"?
Alessandro
Maka saya pikir Anda mengacaukan "pustaka" Dokumen Anda dengan folder Dokumen di jalur profil pengguna Anda. Dua hal berbeda ...
Ƭᴇcʜιᴇ007
Apakah ada cara untuk mengetahui jalur folder Dokumen, mengingat telah dipindahkan dengan cara ini?
Alessandro

Jawaban:

5

Sayangnya, tidak ada variabel lingkungan sederhana yang dapat Anda periksa dari skrip batch jika Anda mengarahkan ini dari jalur default relatif ke profil Anda. Anda dapat melihat daftar lengkap variabel lingkungan (termasuk beberapa yang tidak berdokumen) di sini:

http://ss64.com/nt/syntax-variables.html

Satu hal yang perlu diingat adalah pengalihan folder bahkan memungkinkan Anda untuk memindahkan ini ke jaringan berbagi. Tidak harus ada "drive" yang dapat Anda gunakan semua; mungkin hanya jalur UNC.

Berita baiknya adalah informasi yang Anda inginkan tersedia di registri di lokasi berikut:

HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Folder Pengguna Shell \ Pribadi

Ada sekumpulan folder yang dapat Anda gunakan di User Shell Folderskunci itu, tetapi untuk membaca folder My Documents di sini menggunakan Windows Batch terlihat seperti ini:

reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Personal

Di komputer saya ini menghasilkan output berikut, yang mungkin lebih atau kurang bermanfaat bagi Anda tergantung pada apa yang Anda butuhkan dan seberapa baik Anda dengan skrip Windows Batch:

HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Folder Pengguna Shell
    Personal REG_EXPAND_SZ C: \ Users \ joel \ Documents

Anda juga dapat mencoba vbscript:

Set wshshell = CreateObject("WScript.Shell")
Documents = wshShell.SpecialFolders("MyDocuments")

atau Powershell:

[Environment]::GetFolderPath('MyDocuments')

Ini pada akhirnya mungkin tersedia melalui bash pada Windows juga (sungguh!), Tapi saya belum melihat bagaimana melakukannya dengan cara yang secara konsisten akurat.

Joel Coehoorn
sumber
3

Dengan asumsi Anda memiliki akses tulis ke folder saat ini atau lokasi yang diketahui masih ada di komputer ... Anda dapat menggunakan PowerShell!

The Environment.GetFolderPathFungsi bisa mendapatkan sistem file path dari lokasi terkenal , termasuk folder Dokumen. Perintah PowerShell ini mencetak jalur Dokumen:

[Environment]::GetFolderPath('MyDocuments')

Itu dapat ditulis ke file dengan Out-Filecmdlet. Operator pengalihan >tidak benar-benar bekerja di sini karena menghasilkan file teks Unicode dengan BOM, yang sulit untuk bekerja dengan prosesor batch.

[Environment]::GetFolderPath('MyDocuments') | Out-File 'docspath.tmp' -Encoding ascii

File itu dapat dibaca menjadi variabel batch dengan set /p. Menyatukan semuanya, kami mendapatkan fragmen skrip batch ini:

powershell -Command "[Environment]::GetFolderPath('MyDocuments') | Out-File 'docspath.tmp' -Encoding ascii"
set /p DOCSPATH=< docspath.tmp
del docspath.tmp

Jalur ke folder Dokumen pengguna sekarang dapat dinyatakan sebagai %DOCSPATH%.

Ben N
sumber
1

Saya punya jawaban yang bisa diandalkan. Kombinasi PowerShell yang mengembalikan jawaban ke dos

for /f "delims=" %%a in ('powershell.exe -command "& {write-host $([Environment]::GetFolderPath('MyDocuments'))}"') do Set "$Value=%%a"
Echo Value received from Powershell : %$Value%
dcshoecomp
sumber
Saya tidak tahu bahwa Anda dapat menggunakan $dalam nama variabel CMD. Tapi tahukah Anda bahwa itu penggunaan yang tidak umum, bukan?
Scott
0

Yah itu cukup sederhana :)

Lokasi folder desktop tercantum di sini:

\ HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Shell Folders

atau bahkan lebih simpel di PowerShell

$ DesktopPath = [Lingkungan] :: GetFolderPath ("Desktop")

integratorIT
sumber