2015-06-10 56 views
2

我有一個xcopy無法在.bat(批處理)文件中正確運行,因爲有些挪威語字符。如何獲得一個單行的xcopy命令以在vbscript中運行?

該生產線是:

xcopy /I /V /H /R /C /Y /K /O /X "G:\P - cad_files\Drawings\163997 Ø1000XØ90 T7-8-9.PDF" "F:\CAD\P - cad_files\Drawings\163997 Ø1000XØ90 T7-8-9.PDF" 

如果我從失敗批處理文件中爲「0文件複製」來運行它,因爲它會將源文件錯誤地歸因於字符集。

我試過改變chcp使用chcp以及使用記事本+ +和編碼與各種字符集,但它仍然失敗,由於我在Windows批處理的限制。

所以我的問題是,我怎麼能得到上面的行在VBScript中執行並記錄xcopy輸出?

我想:

set objShell = CreateObject("wscript.Shell") 
strSource = "G:\P - Tdwos_cad_files\Drawings\163997 Ø1000XØ90 T7-8-9.PDF" 
strDest = "F:\CAD\P - Tdwos_cad_files\Drawings\163997 Ø1000XØ90 T7-8-9.PDF" 
command = "xcopy /I /V /H /R /C /Y /K /O /X " & chr(34) & strSource & chr(34) &chr(32) & chr(34) & strDest & chr(34) & " > F:\testvbs.log 2>&1" 
objshell.run command 

,然後執行「CSCRIPT test.vbs」

但不幸的是,這並不儘管事實上,如果我改變objshell.runwscript.echo它顯示正確的工作輸出爲「命令」變量...意味着它顯示正確的語法。

所以...任何程序員知道我可以如何在vbscript中正確運行原始xcopy行?如果你知道如何使用編碼正確地在一個批處理文件中運行它,那也沒關係......我只是還沒有想出來。

+0

注意:我應該說我甚至不確定這會解決我的編碼問題......但是我希望vbscript執行的方式與批處理shell不同 – TheCleaner

+0

如果使用通配符,該怎麼辦? – npocmaka

+0

@npocmaka - 我不能...我有一套特定的文件(大約7k),我需要從各種來源複製到不同的目的地(每個文件1個匹配1個)。我有輸入源文件列表和目標文件列表,但這對我沒有多大幫助。我嘗試了for循環,但xcopy抱怨...但這給了我相同的結果。所以我去了一個「行xcopy批處理文件」的行,但任何與挪威字符行失敗。 – TheCleaner

回答

1

下一個腳本與聯合挪威,捷克文件夾和文件名下一工作條件下下:

  • 保存腳本UTF-16LE0xFFFE字節順序標記編碼,
  • 運行腳本以管理員身份!

這裏的註釋代碼片段:

' save the script UTF-16LE encoded with the 0xFFFE byte order mark 
' run the script as administrator! 
' consider //U option: Use Unicode for redirected I/O from the console 
' cscript //U 30767978.vbs 
' 
option explicit 
dim objShell, strSource, strDest, command, cmd, xx 
set objShell = CreateObject("wscript.Shell") 

strSource = "D:\test\éíáýžřčšě\a Ø1000XØ90 b.txt" 
strDest =  "D:\test\ěščřžýáíé\a Ø1000XØ90 b.txt" 

'      chcp does not matter: `dir` as well as `xcopy` work for all 
cmd = "%comspec% /U /C chcp 65000 & " 
cmd = "%comspec% /U /C chcp 65001 & " 
cmd = "%comspec% /U /C chcp 437 & " 
cmd = "%comspec% /U /C chcp 852 & " 
cmd = "%comspec% /U /C chcp 1250 & " 
'      chcp supposedly matters for redirected output 

command = "dir " & """" & strSource & """ """ & strDest & """" & " & pause " 
xx = objShell.Run(cmd & command, 1, true) 

command = "xcopy /I /V /H /R /C /-Y /K /O /X " _ 
    & """" & strSource & """ """ & strDest & """" & " & pause " 
xx = objShell.Run(cmd & command, 1, true) 

Wscript.Echo xx, cmd & command 
+0

謝謝。說實話,只用一個文件測試你的代碼,但它確實有效。但是,請參閱我的答案,以瞭解我最終做了什麼。我接受你的,因爲這是問題的問題......謝謝你和偉大的工作! – TheCleaner

0

雖然通過JosefZ接受的答案運作良好,我發現,我可以簡單地把我的XCOPY的線,並從蝙蝠移動他們處理這更簡單文件添加到Powershell .ps1文件並運行它。由於某些原因,Powershell不會像批處理文件那樣干擾字符集。

因此,我在2003服務器上安裝了Powershell,並以這種方式運行腳本並運行良好。

我接受了JosefZ的回答,因爲它回答了實際問題,但在此處發佈此信息以防其他人遇到相同問題並想要使用Powershell。

相關問題