Прежде всего, $args
- это автоматическая переменная; Вы не можете установить его, поэтому любая строка типа $args = foo
ничего не будет делать (даже если включен строгий режим; хотя жалоба была бы хорошей).
Тогда вы передаете программе только один аргумент (строку). Я содержит пробелы, но они правильно экранированы или заключены в скобки, поэтому программа видит только один аргумент.
Вам нужно будет использовать массив для аргументов программы вместо одной строки, если вы хотите заранее сохранить ее в переменной. И вам нужно назвать это как-то иначе, чем $args
:
$arguments = "$($serverinfo['table'])",
'out',"$($out_path)test.dat",
'-N','-t,',
'-U',"$($serverinfo['uid'])",
'-P',"$($serverinfo['pwd'])",
'-S',"$($serverinfo['server'])"
& $bcp_path $arguments
Или, что я бы предпочел, на самом деле, вы можете просто написать это в одну строку, которая избавляет от большей части уродства здесь:
$out_path = 'c:\Temp\db'
& $bcp_path $serverinfo['table'] out $out_path\test.dat -N '-t,' -U $serverinfo['uid'] -P $serverinfo['pwd'] -S $serverinfo['server']