我試圖找到一種方法,基於XML文件輸入在Windows中創建完整文件夾/子文件夾/文件(快捷方式)樹狀圖。Windows:基於XML文件創建文件夾結構
我的XML看起來是這樣的:
<folder name="Folder1">
<shortcut url="http://A.com" name="A" />
<shortcut url="http://B.com" name="B" />
<folder name="1.1">
<shortcut url="http://C.com" name="C" />
</folder>
<folder name="Folder1.2">
<shortcut url="http://D.com" name="D" />
</folder>
</folder>
<folder name="Folder2">
...
</folder>
並將得到的文件夾爲:
- Folder1中
- A.url
- B.url
- Folder1中。 1
- C.url
- Folder1.2
- D.url
- 文件夾2
- ...
- >綜上所述,遞歸文件夾/子文件夾的創建,再加上快捷方式(的.url文件)的創建
如何做到這一點任何想法? 通過cmd,powershell?
(如果在的.url無法創建文件,我將手動讓他們(超過300 ...))
非常感謝!
編輯:解
感謝@rojo,良好的方向發展。 我修改了html文件創建「快捷方式」的需求。 (內容截斷,僅供示例) 我添加了一個目標路徑,幾個錯誤處理(創建文件夾和文件,創建錯誤txt文件,易於搜索以手動修復),以及在根目錄下創建文件。 (不是在子文件夾)
可能不是很優化,但也...
<# : Batch Portion
@echo off & setlocal
powershell -noprofile -noexit -noninteractive "iex (gc \"%~f0\" | out-string)"
goto :EOF
: End Batch/begin PowerShell hybrid chimera #>
[xml]$DOM = gc clv.xml
$destPath="D:\Test\Folders"
function CreateShortcut([string]$target, [string]$saveLoc, [string]$fileName) {
$aspxText= @"
<html>
<body>
<a href="$target">Target URL</a>
</form>
</body>
</html>
"@
try{
New-Item ($saveLoc+'/'+$fileName+'.aspx') -type file -value $aspxText -ea Stop
}
catch{
[email protected]"
Name:
$fileName
Url:
$target
Error:
$_.Exception.GetType().FUllname
"@
New-Item ($saveLoc+'/###Error.txt') -type file -value $txtDoc
}
write-host "$($saveLoc)\$($fileName)" -f cyan
}
cd $destPath
function launchCreation($root){
$rootshortcuts = @($root.shortcut)
if($rootshortcuts -ne $null){
foreach ($shortcut in $rootshortcuts) {
$fixedShortcutName=$shortcut.name -replace '[<>:"\/\\?\*\|]', '-'
$urlfile = (pwd).Path
CreateShortcut $shortcut.url $urlfile $fixedShortcutName $shortcut.isDoc $shortcut.isTaxo
}
}
Walk($root)
}
function Walk($root) {
$folders = @($root.folder)
if($folders -ne $null){
foreach ($folder in $folders) {
$folderName=$folder.name -replace '[<>:"\/\\?\*\|]', '-'
if (-not (test-path $folderName)) { md $folderName }
cd $folderName
write-host (Join-Path $destPath $folderName) -f magenta
$shortcuts = @($folder.shortcut)
if($shortcuts -ne $null){
foreach ($shortcut in $shortcuts) {
$fixedShortcutName=$shortcut.name -replace '[<>:"\/\\?\*\|]', '-'
$urlfile = (pwd).Path
CreateShortcut $shortcut.url $urlfile $fixedShortcutName $shortcut.isDoc $shortcut.isTaxo
}
}
Walk $folder
cd..
}
}
}
[void](launchCreation $DOM.documentElement)
使用PowerShell(PowerGUI的爲典型),如果你知道C#或使用Excel VBA(就像VB6 IDE運行和調試.NET類)如果你現在用vb6 – SalientBrain
用腳本很簡單。我會使用powershell,但這更多的是個人喜好。使用你知道的或你想學的東西。我會建議搜索「powershell xml」和cmdlet「new-item」。如果您遇到問題,請在此處詢問,我們會提供幫助,但在這一點上,問題太廣泛了。更多的請求/訂單,而不是QA問題。 –
用基於rojo的有用答案的代碼編輯我的問題。 – okp