如何在 vbscript 中获取 运行 的单行 xcopy 命令?
How can I get a one liner xcopy command to run in vbscript?
我有一个 xcopy 由于某些挪威语字符而无法在 .bat(批处理)文件中正确 运行。
行是:
xcopy /I /V /H /R /C /Y /K /O /X "G:\P - cad_files\Drawings3997 Ø1000XØ90 T7-8-9.PDF" "F:\CAD\P - cad_files\Drawings3997 Ø1000XØ90 T7-8-9.PDF"
如果我 运行 它来自批处理文件,它会失败,因为“复制了 0 个文件”,因为它由于字符集而错误地翻译了源文件。
我已经尝试使用 chcp 以及使用 Notepad++ 更改字符集并使用各种字符集对其进行编码,但由于我猜想在 Windows.
中的批处理中的限制,它仍然失败
所以我的问题是,如何让上面的行在 vbscript 中执行并记录 xcopy 输出?
我试过了:
set objShell = CreateObject("wscript.Shell")
strSource = "G:\P - Tdwos_cad_files\Drawings3997 Ø1000XØ90 T7-8-9.PDF"
strDest = "F:\CAD\P - Tdwos_cad_files\Drawings3997 Ø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.run
更改为 wscript.echo
它确实显示了 "command" 变量的正确输出......这意味着它显示正确的语法。
所以...任何程序员都知道我如何正确 运行 vbscript 中的原始 xcopy 行?如果您知道如何使用编码在批处理文件中正确地 运行 它,那也很好...我只是还没有弄清楚。
下一个脚本在下一个条件下使用组合的挪威-捷克文件夹和文件名:
- 保存使用
0xFFFE
字节顺序标记编码的脚本 UTF-16LE
,并且
- 运行管理员脚本!
这是注释代码片段:
' 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
虽然 JosefZ 接受的答案效果很好,但我发现我可以通过简单地获取我的 xCopy 行并将它们从 .bat 文件移动到 Powershell 文件来更容易地处理这个问题。ps1 文件和 运行它。由于某些原因,Powershell 不会像批处理文件那样对字符集犹豫不决。
所以我在 2003 服务器上安装了 Powershell 并且 运行 这样的脚本运行良好。
我接受了 JosefZ 的回答,因为它回答了实际问题,但将其张贴在这里以防其他人遇到同样的问题并想改用 Powershell。
我有一个 xcopy 由于某些挪威语字符而无法在 .bat(批处理)文件中正确 运行。
行是:
xcopy /I /V /H /R /C /Y /K /O /X "G:\P - cad_files\Drawings3997 Ø1000XØ90 T7-8-9.PDF" "F:\CAD\P - cad_files\Drawings3997 Ø1000XØ90 T7-8-9.PDF"
如果我 运行 它来自批处理文件,它会失败,因为“复制了 0 个文件”,因为它由于字符集而错误地翻译了源文件。
我已经尝试使用 chcp 以及使用 Notepad++ 更改字符集并使用各种字符集对其进行编码,但由于我猜想在 Windows.
中的批处理中的限制,它仍然失败所以我的问题是,如何让上面的行在 vbscript 中执行并记录 xcopy 输出?
我试过了:
set objShell = CreateObject("wscript.Shell")
strSource = "G:\P - Tdwos_cad_files\Drawings3997 Ø1000XØ90 T7-8-9.PDF"
strDest = "F:\CAD\P - Tdwos_cad_files\Drawings3997 Ø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.run
更改为 wscript.echo
它确实显示了 "command" 变量的正确输出......这意味着它显示正确的语法。
所以...任何程序员都知道我如何正确 运行 vbscript 中的原始 xcopy 行?如果您知道如何使用编码在批处理文件中正确地 运行 它,那也很好...我只是还没有弄清楚。
下一个脚本在下一个条件下使用组合的挪威-捷克文件夹和文件名:
- 保存使用
0xFFFE
字节顺序标记编码的脚本UTF-16LE
,并且 - 运行管理员脚本!
这是注释代码片段:
' 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
虽然 JosefZ 接受的答案效果很好,但我发现我可以通过简单地获取我的 xCopy 行并将它们从 .bat 文件移动到 Powershell 文件来更容易地处理这个问题。ps1 文件和 运行它。由于某些原因,Powershell 不会像批处理文件那样对字符集犹豫不决。
所以我在 2003 服务器上安装了 Powershell 并且 运行 这样的脚本运行良好。
我接受了 JosefZ 的回答,因为它回答了实际问题,但将其张贴在这里以防其他人遇到同样的问题并想改用 Powershell。