2016-01-19 87 views
1

我正在尋找寫一個批處理文件,將文件複製到用戶的文檔文件夾,但我找不到指示它的環境變量。我可以從用戶配置文件路徑派生Documents文件夾,但這是不可靠的,因爲Windows可以通過選擇位置選項卡+在文件夾屬性中移動將文檔文件夾移動到任何位置。Windows 10環境變量的文檔文件夾

任何人都知道如何找到該文件夾​​?

+1

什麼讓你覺得會有一個環境變量呢?另外,你可以通過在命令行鍵入'set'來看到所有當前環境變量的列表。 – SomethingDark

回答

4

這裏沒有環境變量。你可以,而是看在Windows註冊表中,它存儲的文檔文件夾的名稱的地方,但即使是棄用:

@echo off 
for /f "tokens=3*" %%p in ('REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v Personal') do (
    set DocumentsFolder=%%p 
) 
echo %DocumentsFolder% 
+0

這在我看到的系統中並不存在。 – RLH

+0

@RLH當我在XP和10上都試過時,它工作。 –

+1

適用於我。我的'文檔'庫指向'D:\ Documents'並且這給出了正確的輸出。不過,圖書館可能需要修改HKCU值才能創建。更多的測試可能是值得的。 – rojo

3

嗯,你問是不是傻瓜證明什麼。你指的是圖書館。圖書館的問題是圖書館中可能包含多個文件夾。

但是,有一個合理的方法來得到你想要的。 Windows提供ShellSpecialFolder常量,您可以使用Shell.Application COM對象進行枚舉。 Documents庫的常量是0x05。這裏有一個PowerShell命令例如:

powershell "(new-object -COM Shell.Application).Namespace(0x05).Self.Path" 

我家的電腦有一個120GB固態硬盤引導驅動器和一個2TB的d:驅動器。所以我有我的文檔庫指向D:\Documents。上面的命令打印D:\Documents正如你所希望的那樣。

如果您更喜歡Windows Script Host over PowerShell(因爲WSH速度更快),您可以編寫混合批處理+ JScript腳本來完成相同的任務。

@if (@CodeSection == @Batch) @then 
@echo off & setlocal 

rem // cscript re-evaluates this script with the JScript interpreter 
cscript /nologo /e:JScript "%~f0" 

goto :EOF 
@end // end Batch/begin JScript hybrid chimera 

WSH.Echo(WSH.CreateObject('Shell.Application').Namespace(0x05).Self.Path); 

你也可以考慮letting the user browse他需要的保存位置,默認爲0x05的文件。

3

我沒有看到完全可靠的方式來批量執行此操作。我知道這是超出請求,但我認爲這個VBScript將可靠地工作。

Option explicit 
Dim objShell 
Dim strPath 

Set objShell = Wscript.CreateObject("Wscript.Shell") 
strPath = objShell.SpecialFolders("MyDocuments") 
msgbox strPath 
+1

偉大的思想家都認爲一樣。 :) +1也可以和我一樣使用ShellSpecialFolder常量。奇怪的是,你的方法'WSH.CreateObject('Wscript.Shell')。SpecialFolders('MyDocuments')'和我的WSH.CreateObject('Shell.Application')具有相同的輸出。命名空間(0x05).Self。路徑「,並且具有完全相同的字符數量。 – rojo