พรอมต์คำสั่งของ Windows - รับโฟลเดอร์ Documents ของผู้ใช้ที่ถูกย้าย


8

ฉันกำลังพยายามเขียนสคริปต์แบตช์ง่าย ๆ ที่คัดลอกไฟล์บางไฟล์จาก%userprofile%\Documentsไดเรกทอรี ผมทดสอบสคริปต์บนเครื่องของฉัน แต่หลังจากความล้มเหลวบางอย่างที่ฉันรู้ว่าฉันย้ายข้อมูลของผู้ใช้ไปยังพาร์ทิชันที่แยกต่างหาก ดังนั้น%userprofile%\Documentsเป็นที่ว่างเปล่าและ (ชัด) ไม่มีอะไรที่จะถูกคัดลอก

ฉันได้ลองใช้ตัวแปรสภาพแวดล้อมอื่น ๆ เช่น%homedrive%และ%homepath%แต่พวกเขายังคงชี้ไปที่มาตรฐานC:\...

มีวิธีการค้นหาไดรฟ์จริงที่ใช้สำหรับข้อมูลของผู้ใช้หรือไม่

ฉันใช้ Windows 10

ขอบคุณ!

แก้ไข

ตามที่อธิบายไว้โดยƬᴇcʜιᴇ007ฉันไม่ได้ย้ายข้อมูลของผู้ใช้ไปยังพาร์ติชันอื่น แต่ฉันเพิ่งย้ายโฟลเดอร์ "หลัก" (เอกสารวิดีโอ ... ) ไปยังโฟลเดอร์ที่เกี่ยวข้องในพาร์ติชันอื่น: คลิกขวาที่ (เช่น ) เอกสารคุณสมบัติเส้นทาง

ฉันจะค้นหาเส้นทางของโฟลเดอร์เอกสารที่ถูกย้ายด้วยวิธีนี้ได้อย่างไร?


2
% userprofile% ควรมีโฟลเดอร์ที่ถูกต้องโดยไม่คำนึงถึงตำแหน่งที่คุณวางไว้ตราบใดที่คุณย้ายโฟลเดอร์โปรไฟล์อย่างถูกต้องควรมีความถูกต้อง แล้วคุณย้ายมันไปยังพาร์ติชั่นอื่นได้อย่างไร?
Ƭᴇcʜιᴇ007

ตกลงฉันจำไม่ได้ดังนั้นฉันจึงเรียกดูและในที่สุดฉันก็พบสิ่งที่ฉันทำ ฉันคลิกขวาที่โฟลเดอร์ "main" (เอกสารวิดีโอ ฯลฯ ) เลือก Properties เลือกแท็บ Path และเปลี่ยนพา ธ (ฉันใช้ Windows รุ่นภาษาอิตาลีและเมื่อฉันเพิ่งแปลชื่อที่ฉันเห็นบนหน้าจอของฉันคำบางคำอาจแตกต่างออกไป) ดังนั้นคุณพูดถูกแล้ว% userprofile% กำลังทำอะไรผิดปกติ แต่คำถามยังคงอยู่: ฉันจะค้นหาเส้นทางที่แท้จริงของโฟลเดอร์เอกสาร "หลัก" ได้อย่างไร
เลสซานโดร

ถ้าอย่างนั้นฉันคิดว่าคุณสับสน "ห้องสมุด" เอกสารของคุณกับโฟลเดอร์เอกสารในเส้นทางโปรไฟล์ผู้ใช้ของคุณ สองสิ่งที่แตกต่างกัน ...
Ƭᴇcʜιᴇ007

มีวิธีการค้นหาเส้นทางของโฟลเดอร์เอกสารหรือไม่เนื่องจากพิจารณาว่าได้ถูกย้ายไปในลักษณะนี้หรือไม่?
Alessandro

คำตอบ:


5

น่าเสียดายที่ไม่มีตัวแปรสภาพแวดล้อมอย่างง่ายที่คุณสามารถตรวจสอบจากสคริปต์ชุดงานหากคุณเปลี่ยนเส้นทางจากเส้นทางเริ่มต้นที่สัมพันธ์กับโปรไฟล์ของคุณ คุณสามารถดูรายการตัวแปรสภาพแวดล้อมทั้งหมด (รวมถึงตัวแปรที่ไม่มีเอกสาร) ที่นี่:

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

สิ่งที่ควรคำนึงถึงก็คือการเปลี่ยนเส้นทางโฟลเดอร์ช่วยให้คุณสามารถย้ายสิ่งเหล่านี้ไปยังเครือข่ายที่ใช้ร่วมกัน ไม่จำเป็นต้องมี "ไดรฟ์" ที่คุณสามารถใช้งานได้ทั้งหมด มันอาจเป็นเส้นทาง UNC

ข่าวดีก็คือข้อมูลที่คุณต้องการมีอยู่ในรีจิสทรีที่ตำแหน่งต่อไปนี้:

โฟลเดอร์ Shellers \ Personal HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ User HKEY_CURRENT_USER

มีทั้งชุดโฟลเดอร์ที่คุณสามารถเลื่อนไปมาในUser Shell Foldersคีย์นั้นได้ แต่หากต้องการอ่านโฟลเดอร์ My Documents ที่นี่โดยใช้ Windows Batch จะมีลักษณะดังนี้:

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

บนเครื่องของฉันผลิตผลลัพธ์ต่อไปนี้ซึ่งอาจเป็นประโยชน์กับคุณมากหรือน้อยขึ้นอยู่กับสิ่งที่คุณต้องการและความดีของคุณกับสคริปต์ Windows Batch:

โฟลเดอร์เชลล์ HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ User
    REG_EXPAND_SZ ส่วนบุคคล C: \ Users \ joel \ Documents

คุณยังสามารถลอง vbscript:

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

หรือ PowerShell:

[Environment]::GetFolderPath('MyDocuments')

ในที่สุดอาจมีการใช้งานผ่าน bash บน Windows เช่นกัน (จริง ๆ !) แต่ฉันไม่เคยเห็นวิธีที่จะทำได้อย่างแม่นยำ


3

สมมติว่าคุณมีสิทธิ์ในการเขียนไปยังโฟลเดอร์ปัจจุบันหรือตำแหน่งที่รู้จักซึ่งมีอยู่บนคอมพิวเตอร์ ... คุณสามารถใช้ PowerShell!

Environment.GetFolderPathฟังก์ชั่นจะได้รับเส้นทางระบบแฟ้มของสถานที่ที่รู้จักกันดีรวมทั้งโฟลเดอร์เอกสาร คำสั่ง PowerShell นี้พิมพ์เส้นทางเอกสาร:

[Environment]::GetFolderPath('MyDocuments')

สามารถเขียนลงไฟล์ด้วยOut-Filecmdlet ตัวดำเนินการเปลี่ยนเส้นทาง>ไม่ทำงานที่นี่เพราะสร้างไฟล์ข้อความ Unicode ด้วย BOM ซึ่งยากที่จะทำงานกับในตัวประมวลผลแบตช์

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

set /pไฟล์ที่สามารถอ่านได้เป็นตัวแปรชุดด้วย เมื่อรวมเข้าด้วยกันแล้วเราจะได้แฟรกเมนต์สคริปต์ชุดนี้:

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

%DOCSPATH%เส้นทางไปยังเอกสารของผู้ใช้โฟลเดอร์นี้จะแสดงเป็น


1

ฉันมีคำตอบที่เชื่อถือได้ การรวมกันของ powershell ที่ส่งกลับคำตอบกับ dos

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

ฉันไม่ทราบว่าคุณสามารถใช้$ชื่อตัวแปร CMD ได้ แต่คุณรู้ไหมว่ามันเป็นการใช้ที่ผิดปกติใช่มั้ย
สกอตต์

0

มันง่ายมาก :)

ตำแหน่งของโฟลเดอร์เดสก์ท็อปอยู่ที่นี่:

\ HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Shell โฟลเดอร์

หรือแม้แต่ง่ายกว่าใน PowerShell

$ DesktopPath = [สภาพแวดล้อม] :: GetFolderPath ("เดสก์ท็อป")

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.