Dấu nhắc lệnh của Windows - Nhận thư mục Tài liệu của người dùng di dời


8

Tôi đang cố gắng viết một tập lệnh bó đơn giản sao chép một số tệp từ %userprofile%\Documentsthư mục. Tôi đang kiểm tra tập lệnh trên máy của mình, nhưng sau một vài lần thất bại tôi nhận ra rằng tôi đã chuyển dữ liệu của người dùng sang một phân vùng riêng . Do đó, %userprofile%\Documentstrống rỗng , và (rõ ràng) không có gì được sao chép.

Tôi đã cố gắng biến môi trường khác như %homedrive%%homepath%, nhưng họ vẫn chỉ ở tiêu chuẩnC:\...

Có cách nào để tìm ra ổ đĩa thực tế được sử dụng cho dữ liệu của người dùng không?

Tôi đang sử dụng Windows 10.

Cảm ơn!

BIÊN TẬP

Như được chỉ ra bởi Ƭᴇcʜιᴇ007, tôi đã không di chuyển dữ liệu của người dùng sang phân vùng khác, nhưng tôi chỉ chuyển các thư mục "chính" (Tài liệu, Video, ...) sang một số thư mục tương ứng trên một phân vùng khác: nhấp chuột phải vào (ví dụ: ) Tài liệu, thuộc tính, đường dẫn.

Làm cách nào tôi có thể tìm ra đường dẫn của thư mục Tài liệu đã được di chuyển theo cách này?


2
% userprofile% nên có đúng thư mục bất kể bạn đặt nó ở đâu, miễn là bạn di chuyển các thư mục hồ sơ một cách chính xác thì nó phải chính xác. Vì vậy, làm thế nào chính xác bạn đã di chuyển nó đến phân vùng khác?
Ƭᴇcʜιᴇ007

Ok, tôi thực sự không nhớ, vì vậy tôi đã duyệt một chút và cuối cùng tôi đã tìm ra những gì tôi đã làm. Tôi nhấp chuột phải vào các thư mục "chính" (Tài liệu, Video, v.v.), chọn Thuộc tính, chọn tab Đường dẫn và thay đổi đường dẫn. (Tôi đang sử dụng phiên bản tiếng Ý của Windows và vì tôi hầu như không dịch các tên tôi thấy trên màn hình của mình, một số từ có thể khác). Vì vậy, bạn đã đúng,% userprofile% hoàn toàn không làm gì sai. Nhưng câu hỏi vẫn là: làm thế nào tôi có thể tìm thấy đường dẫn thực sự của thư mục Tài liệu "chính"?
Alessandro

Sau đó, tôi nghĩ rằng bạn đang nhầm lẫn "thư viện" Tài liệu của mình với thư mục Tài liệu trong đường dẫn hồ sơ người dùng của bạn. Hai điều khác nhau ...
cʜιᴇ007

Có cách nào để tìm ra đường dẫn của thư mục Documents, xem xét rằng nó đã được di dời theo cách này?
Alessandro

Câu trả lời:


5

Thật không may, không có biến môi trường đơn giản nào bạn có thể kiểm tra từ tập lệnh bó nếu bạn đã chuyển hướng này từ đường dẫn mặc định liên quan đến hồ sơ của bạn. Bạn có thể xem danh sách đầy đủ các biến môi trường (bao gồm một số tài liệu không có giấy tờ) tại đây:

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

Một lưu ý khác là chuyển hướng thư mục thậm chí cho phép bạn chuyển những thứ này sang chia sẻ mạng. Không cần phải có một "ổ đĩa" mà bạn có thể sử dụng tất cả; nó có thể chỉ là một con đường UNC.

Tin tốt là thông tin bạn muốn có sẵn trong sổ đăng ký tại địa điểm sau:

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

Có cả bộ thư mục bạn có thể di chuyển trong User Shell Folderskhóa đó , nhưng để đọc thư mục Tài liệu của tôi ở đây bằng Windows Batch trông như thế này:

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

Trên máy của tôi, điều này tạo ra đầu ra sau, có thể ít nhiều hữu ích cho bạn tùy thuộc vào những gì bạn cần và mức độ tốt của bạn với các tập lệnh Windows Batch:

HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ User Shell Folders
    REG_EXPAND_SZ cá nhân: \ Users \ joel \ Documents

Bạn cũng có thể thử vbscript:

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

hoặc Powershell:

[Environment]::GetFolderPath('MyDocuments')

Điều này cuối cùng cũng có thể có sẵn thông qua bash trên Windows (thực sự!), Nhưng tôi chưa thấy làm thế nào để làm điều đó theo cách sẽ luôn chính xác.


3

Giả sử bạn có quyền ghi vào thư mục hiện tại hoặc một số vị trí còn tồn tại trên máy tính ... bạn có thể sử dụng PowerShell!

Các Environment.GetFolderPathchức năng có thể nhận được đường dẫn hệ thống tập tin của các địa điểm nổi tiếng , bao gồm cả thư mục Documents. Lệnh PowerShell này in đường dẫn Documents:

[Environment]::GetFolderPath('MyDocuments')

Nó có thể được ghi vào một tập tin với Out-Filelệnh ghép ngắn. Toán tử chuyển hướng >không thực sự hoạt động ở đây vì nó tạo ra tệp văn bản Unicode với BOM, rất khó để làm việc với bộ xử lý hàng loạt.

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

Tập tin đó có thể được đọc thành một biến số với set /p. Đặt tất cả lại với nhau, chúng ta có được đoạn mã script này:

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

Đường dẫn đến thư mục Tài liệu của người dùng hiện có thể được thể hiện dưới dạng %DOCSPATH%.


1

Tôi có câu trả lời đáng tin cậy. Sự kết hợp của powershell trả về câu trả lời cho dos

for /f "delims=" %%a in ('powershell.exe -command "& {write-host $([Environment]::GetFolderPath('MyDocuments'))}"') do Set "$Value=%%a"
Echo Value received from Powershell : %$Value%

Tôi không biết rằng bạn có thể sử dụng $tên biến trong CMD. Nhưng bạn biết rằng đó là một cách sử dụng không phổ biến, phải không?
Scott

0

Chà, nó khá đơn giản :)

Vị trí của thư mục máy tính để bàn được liệt kê ở đây:

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

hoặc thậm chí đơn giản hơn trong PowerShell

$ DesktopPath = [Môi trường] :: GetFolderPath ("Máy tính để bàn")

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.