Argument issue when using vb.net shell () - vb.net

I was trying to use shell function in vb.net to run a program and then write/export the result else where , it works on win8 but not XP !! The command line prints this error
'C:\Documents' is not recognized as an internal or external command,
operable program or batch file.
Press any key to continue . . .
Dim save as String="C:\exported.txt"
Dim command As String = tempPath & "app.exe -f " & IO.Path.GetTempPath & " -o " & save & " & pause"
shell("cmd /c " & command, AppWinStyle.NormalFocus, True)

Process.Start(IO.Path.Combine(tempPath, "app.exe"), "-f """ & IO.Path.GetTempPath & """ -o """ & Save() & """ & pause")

You hace a folder in the command with a space in it (probably the documents and Settings folder). cmd.exe has no way of telling whether the space is in the file name or the end of the file name, unless you put the file name in "" - like "C:\doxuments and Settings..."
Dim command As String = tempPath & "app.exe -f \"" & IO.Path.GetTempPath & "\" -o \"" & save & "\" & pause"
(\" is intended to escape a " so that it translates to embedding a " in the string. I'm not sure what the VB syntax is.)
EDIT:
I think #Roy van der Velde below has the 'escaping correct. The final part not checked is tempPath. See my comment on the question.

Related

How can I see the results and how can the windows Close

I have this code, and I´m calling one Java program to pass the aurguments, that I select in VB.
My issues is:
The cmd windows open, but I can't see what the program is doing, I only see on the window the arguments that are pass, and when finish, the window don't close.
enter image description here
and when program stop, the windows don't close.
enter image description here
This is the result if I run by command line
enter image description here
txbSendCommand.Text = "java -jar FACTEMICLI-2.5.16-33194-cmdClient.jar " & "-i " & TextBox1.Text & "" & " -n " & stNIF & " -p " & stPassword & " -a " & iAno & " -m " & iMes & " -op " & stvalidar & stFicheiroEscolhido & " -o c:\saft\outputfile.xml"
Dim stcaminhoexterno As String
If stErrorMessage = False Then
Dim app As New ProcessStartInfo("cmd.exe") With {.RedirectStandardInput = True, .UseShellExecute = False, .CreateNoWindow = False}
Dim myProcess As New Process
myProcess = Process.Start(app)
Dim arguments As String = txbSendCommand.Text
myProcess.StandardInput.WriteLine(arguments)
myProcess.Close()
End If
How can I see the results in the external windows, or better even in a windows or something that I can have in the form.
How Can the window close after the process is done

How to execute two commands sequentially

Private Sub btnUnHide_Click(sender As Object, e As EventArgs) Handles btnUnHide.Click
Dim path As String
fdbUnHide.ShowDialog()
path = fdbUnHide.SelectedPath
RunCommandCom(path)
End Sub
Shared Sub RunCommandCom(path As String)
Dim unhide As String = "attrib -r -s -h /s /d"
Try
Shell("cmd.exe /C cd " & path)
Shell("cmd.exe /C" & unhide)
End Sub
I also tried using "&" but didn't work
Shell("cmd.exe /C cd " & path "& " & unhide)
Can anybody help me with this?
NOTE: This answer addresses the problem asked in the question, but it is certainly not the best way of un-hiding a folder and its files.
THE BEST and recommended approach is described in Ctznkane525's answer.
The problem with your current code is that you are missing a space before the ampersand (&).
This:
"cmd.exe /C cd " & path & "& " & unhide
essentially becomes:
"cmd.exe /C cd C:\your\path& attrib -r -s -h /s /d"
...making & part of the path. You need to add a space before it:
"cmd.exe /C cd " & path & " & " & unhide
Though be aware that Shell() is an outdated function from the VB6 era and shouldn't be used. When "executing commads" (or more correctly: starting processes) you should use the Process.Start() method:
Process.Start("cmd.exe", "/C cd " & path & " & " & unhide)
Here is how you unhide a folder in .net and the files
Dim t As New System.IO.FileInfo(path)
t.Attributes = t.Attributes And Not FileAttributes.Hidden
For Each fn As String in Directory.GetFiles(path, "*.*", SearchOption.AllDirectories)
t = New System.IO.FileInfo(fn)
t.Attributes = t.Attributes And Not FileAttributes.Hidden
Next
The attributes are a bitwise flag. You'll want to import system.io at the top.

How to use multiple commands with path references in command prompt

I'm new to this forum, so please correct me if I'm asking this the wrong way or not specific enough..
While coding in VB.NET I'm trying to pass multiple commands, and an argument containing a reference to a path:
Dim p As New Process
Dim pi As New ProcessStartInfo
pi.Arguments = " " & "/K """ & "C:\program files\gdal\gdalshell.bat" & """ & " & "cd C:\program files\gdal" & _
" & " + "gdal_translate" + " -of Jpeg -outsize 2000 2000 """ & "D:\box sync\my box (907070)\RIS_RHDHV_Overgang\GDAL\test2.xml" & """ "
pi.FileName = "C:\windows\syswow64\cmd.exe"
p.StartInfo = pi
p.Start()
The command prompt returns:
'C:\Program' is not recognized as an internal or external command, operable program or batch file.
I did some research on the matter and found:
vb.net How to pass a string with spaces to the command line
This however still doesn't seem to solve the problem. When I execute the following code, it runs without issues:
Dim p As New Process
Dim pi As New ProcessStartInfo
pi.Arguments = " " & "/K """ & "C:\program files\gdal\gdalshell.bat" & """ & " & "cd C:\program files\gdal" & _
" & " + "gdal_translate"
pi.FileName = "C:\windows\syswow64\cmd.exe"
p.StartInfo = pi
p.Start()
To me it looks like the problem is caused by the path reference inside an argument. I have read and used the different answers for using multiple commands, without any luck.
It would be great if someone could help me on this topic.
Kind regards,
Stuart
First of all, as a little note you don't need to add a space in the beginning of the arguments. That's only done when you write the entire command (including the executable) in one line.
Now, the correct way to pass a path as an argument is to surround it with quotes. So something like this should do:
(please note that I have also shortened some unnecessary concatenations, etc.)
pi.Arguments = "/K """"C:\program files\gdal\gdalshell.bat"" & cd ""C:\program files\gdal"" & " & _
"gdal_translate -of Jpeg -outsize 2000 2000 ""D:\box sync\my box (907070)\RIS_RHDHV_Overgang\GDAL\test2.xml"""""
EDIT:
I found that you also have to put the entire text after /K in quotes for it to work.

Excel VBA Shell command with spaces in file path

Public Sub openEntryFiles()
Dim filePath, shellCommand, agingsEntry, invenEntry As String
filePath = Range("CustomerPath").Value2 & "\files\"
agingsEntry = "agings\entry_EP.bat"
invenEntry = "inven\entry_EP.bat"
shellCommand = """%ProgramFiles(x86)%\TextPad 5\TextPad.exe"" -r -q -u """ & filePath & agingsEntry & """ -u """ & filePath & invenEntry & """"
Debug.Print shellCommand
Shell shellCommand, 0
End Sub
I am trying to write a subroutine that will run a shell command with spaces in the file path. I have done lots of research about using multiple quotes, but I still get a file not found error whenever I run the code. The debug print that is outputted to the Immediate window reads:
"%ProgramFiles(x86)%\TextPad 5\TextPad.exe" -r -q -u "\\ablsgaat002\aclwin\Clients\*****\files\agings\entry_EP.bat" -u "\\ablsgaat002\aclwin\Clients\*****\files\inven\entry_EP.bat"
Copying that string into a shell window works great, however, running it from the Shell command in VBA doesn't work. What am I doing wrong?
Use Environ function to get Special Folders
pathSpecial = Environ("ProgramFiles(x86)")
shellCommand = """" & pathSpecial & "\TextPad 5\TextPad.exe"" -r -q -u """ & filePath & agingsEntry & """ -u """ & filePath & invenEntry & """"

Excel VBA shell command to search Chrome

I have the following VBA code to open Chrome and navigate to a specific page:
Sub ExampleSub()
Dim chromePath As String
chromePath = """C:\Program Files\Google\Chrome\Application\chrome.exe"""
Shell (chromePath & " -url http:google.ca")
End Sub
What I can't find is the command to use the search engine to run a Google search for a string I pass it, like this:
Search_String = "Where to find pizza in Tibet"
Shell (chromePath & " -url " & Search_String)
or
Shell(chromePath & " -search " & Search_String)
or
Shell(chromePath & " " & Search_String)
I'd be running several searches, so the search criteria needs to be dynamic.
You are formatting your URL string incorrectly. Please consider the following solution:
Sub ExampleSub()
Dim chromePath As String
Dim search_string As String
search_string = "Where to find pizza in Tibet"
search_string = Replace(search_string, " ", "+")
chromePath = "C:\Program Files\Google\Chrome\Application\chrome.exe"
' Uncomment the following line and comment out previous for Windows 64 versions
' chromePath = "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"
Shell (chromePath & " -url http://google.ca/#q=" & search_string)
End Sub
If you run a search from google.com and review the resulting URL you will see that search terms are seperated by +. This is why I replace all white spaces for + and then add it to the URL. Regards,