VBScript CopyFile с пробелами - PullRequest
0 голосов
/ 13 января 2019

VBScript получает входные параметры, содержащие пробелы в пути и в имени файла:

SOURCE = "c:\temp\testabc"
TARGET = "F:\work\dir space"
PARM   = "Test file.txt"
DEST   = TARGET & "\" & PARM
'…
fso.CopyFile SOURCE, DEST

DEST будет выглядеть так: "F:\work\dir space"\"Test file.txt", но VBScript выдает ошибку:

Номер ошибки и описания: 52 Неверное имя файла или номер

Команда copy не имеет проблем, когда я делаю это:

copy "c:\temp\testabc" "F:\work\dir space"\"Test file.txt"

Я не могу контролировать ни каталог, ни имя файла, так как я конвертирую пакетный скрипт для использования VBScript. Любые идеи, как я могу скопировать в место назначения, которое содержит пробелы в пути и имени файла БЕЗ вызова xcopy или copy команд?

=============================================== ========================= Добавляя больше информации, я попробовал то, что вы предложили, но я все еще получаю ту же ошибку. Сценарий выполняется через командную строку, например,

cscript.exe test001.vbs "F:\Work\datafile.txt"

Фрагмент кода:

…
Set fso = CreateObject("Scripting.FileSystemObject")
Dest = fso.BuildPath(Target, Parm)
…
Do While retry_counter < retry_max
    WScript.Echo "Retry count ", retry_counter
    fso.CopyFile Source, Dest
    if Err.Number <> 0 Then
        Wscript.Echo "Number of the Error and Description is ", Err.Number, " ", Err.Description
        Err.Clear
    End if
    retry_counter = retry_counter + 1
    WScript.echo now()
    WScript.Sleep retry_sleeper
    WScript.echo now()
Loop
…

Показать список:

--------------------------------------------
Display dictionary contents :
my_id  :  "someuser"
my_source  :  "c:\temp\testabc"
my_target  :  "F:\work\dir space"
my_parm  :  "Test file.txt"
my_idt  :  A12175803
my_idtu  :  IDTU5803
--------------------------------------------

--------------------------------------------
Display variable contents :
Source:  "c:\temp\testabc"
Target:  "F:\work\dir space"
Parm:    "Test file.txt"
Dest:    "F:\work\dir space"\"Test file.txt"
--------------------------------------------

Retry count  0
Number of the Error and Description is  52   Bad file name or number
1/13/2019 5:49:05 PM
1/13/2019 5:49:10 PM
Retry count  1
....

1 Ответ

0 голосов
/ 13 января 2019

Код, который вы опубликовали, не приводит к появлению ошибки Фактически, он делает точно , что вы хотите, чтобы он делал.

Чтобы получить ошибку, которую вы описали, вам нужно добавить дополнительные двойные кавычки к вашему пути, например, как это:

DEST = """" & TARGET & """\""" & PARM & """"

или (возможно, более вероятно), как это:

TARGET = """F:\work\dir space"""
PARM   = """Test file.txt"""
DEST   = TARGET & "\" & PARM

Не делай этого. Методы FileSystemObject могут нормально обрабатывать пути с пробелами. Не нужно пытаться справиться с этим самостоятельно. Единственное, что вы можете изменить, - это способ создания пути назначения:

SOURCE = "c:\temp\testabc"
TARGET = "F:\work\dir space"
PARM   = "Test file.txt"
DEST   = fso.BuildPath(TARGET, PARM)

fso.CopyFile SOURCE, DEST
...