Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Running a batch file in a given directory using VBA

When I go to my batch file's location and open it, the batch file works. My batch file is simply:

cd .\data
dir/b/o:n > names.txt

As you can see, I'm in my current directory and moving down to the sub directory "data" and coping all the names and creating a file called names.txt.

When I say

shell "location of file" 

it opens the batch file, but the directory that is defaulted to is C:\my documents, so my commands won't work because it cannot find the sub directory. I want this to be a dynamic batch file, and therefore i need to write something in VBA that will open the batch file under its current directory or something to this effect.

How do I do this?

like image 428
Jason Avatar asked Feb 22 '12 21:02

Jason


People also ask

How do I run a batch file in a folder?

Open Start. Search for Command Prompt, right-click the top result, and select the Run as administrator option. Type the following command to run a Windows 10 batch file and press Enter: C:\PATH\TO\FOLDER\BATCH-NAME. bat.

How do I make a batch file run automatically?

Press Start, type Run, and press Enter . In the Run window, type shell:startup to open the Startup folder. Once the Startup folder is opened, click the Home tab at the top of the folder. Then, select Paste to paste the shortcut file into the Startup folder.


2 Answers

The following should give you the effect you seek.

My test code is:

Option Explicit
Sub TryShell()

  Dim PathCrnt As String

  PathCrnt = ActiveWorkbook.Path
  Call Shell(PathCrnt & "\TryShell.bat " & PathCrnt)

End Sub

My test batch file is named TryShell.bat and contains:

cd %1
dir *.* >TryShell.txt

I have placed my batch file in the same folder as the workbook containing my macro.

The statement PathCrnt = ActiveWorkbook.Path sets PathCrnt to the name of the directory containing the active workbook. You can set PathCrnt to whatever directory you require.

When I call Shell, I have added PathCrnt as a parameter.

In my batch file, I set the current directory to %1 which is the first parameter.

The dir command works as I wish because the current directory is my directory and not the system default directory.

Hope this is clear.

like image 113
Tony Dallimore Avatar answered Oct 27 '22 11:10

Tony Dallimore


C:\My Documents is probably the directory where your speadsheet is located. If you add

ChDir "C:\TheFolderWhereYourBatchIs"

before launching your Shell command and that should work...

Alternatively, you could change your batch file to use an absolute directory instead of a relative one.

like image 41
assylias Avatar answered Oct 27 '22 10:10

assylias