Убедитесь, что относительный путь используется в cmd.exe при запуске пакетных файлов из Excel - PullRequest
1 голос
/ 06 октября 2011

У меня есть файл Excel с кнопкой, которая вызывает команду Shell в VB:

Shell(ThisWorkbook.Path & "\python_script.bat", vbNormalFocus)

Команда Shell вызывает вышеуказанный командный файл, который запускает скрипт Python:

python python_script.py

Все соответствующие файлы (файл Excel, командный файл, файлы данных, файл Python) все находятся в одном каталоге, назовите это sample_program, потому что я создаю это для кого-то другого, и я намерен для их просто разархивировать и запустить.

В Excel при тестировании я нажимаю кнопку и получаю эту ошибку:

C:\Users\<user_name>\Documents>python python_script.py
python: can't open file 'python_script.py': [Errno 2] No such file or directory

По какой-то причине, хотя все эти файлы находятся в одном месте, cmd.exe запускается из моего каталога пользователя: C:\Users\<user_name>\Documents

Я не хочу, чтобы cmd.exe использовал этот путь; Я хочу использовать каталог path\to\sample_program.

Как заставить это использовать относительные пути, чтобы, когда я передаю эту папку кому-то другому, и они помещают ее в любое место, она будет работать как автономное устройство?

Ответы [ 2 ]

2 голосов
/ 06 октября 2011

Попробуйте, если path\to\sample_program находится на том же диске, что и домашний диск

Shell "cmd.exe /k cd " & ThisWorkbook.Path & "&&python_script.bat"

или это если path\to\sample_program равно , а не на том же диске, что и домашний диск, или вы не знаете заранее

Shell "cmd.exe /k " & Left(ThisWorkbook.Path, 2) & "&&cd " & ThisWorkbook.Path & "&&python_script.bat"
1 голос
/ 06 октября 2011

Вы можете использовать Environ("username") для получения имени пользователя для входа в систему, поэтому для вашего примера (который я предполагаю, что Windows 7)

Sub GetDir()
MsgBox "C:\Users\" & Environ("username") & "\Documents"
End Sub

Вы также можете автоматически получать определенные местоположения независимо от ОС, используя SpecialFOldersт.е.

Sub GetPath()
Set wshShell = CreateObject("WScript.Shell")
Documents = wshShell.SpecialFolders("MyDocuments")
MsgBox Documents
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...