Jump to content

Convert Batch file to VB or Registry for Context Menu Access


Recommended Posts

First, I'm no programmer. I cobbled together this bat file that essentially creates a specific directory structure based on a parent "series" folder (12300, 12400, 12500, etc.). Nested within that folder will be a client folder. Inside the Client folder will be a specific job folder (12312 Brochure, 12317 Flyer, etc.) Inside the job folder will be HSD, Design, LFC, PROOF, and Materials. Inside the Materials folder will be a "yyyy.mm.dd Files received" folder. The series, client, and job folders are variable.

I would like to add this functionality to the context menu for Win 7. I'm not sure how to go about doing this. I've seen another thread that leads a user through a similar process, but I have no idea how to convert my code to registry entries. Here is the code:

@ECHO OFF

:BEGIN

CLS

SET AGPath=X:\01 PC WIP\

SET /P Cust=Customer Name:

SET /P InvNo=Invoice Number (Last 5 digits only):

SET /P Job=Type of job:

SET SERIES=%InvNo:~0,3%00 PC\

CLS

echo Is this correct?

echo %AGPath%%SERIES%

echo %Cust%\

echo %InvNo% %Job%

SET /P Appr=Y(yes) N(no) C(cancel):

if '%Appr%' == 'y' goto Appr

if '%Appr%' == 'n' goto BEGIN

if '%Appr%' == 'c' goto Cancel

:Appr

mkdir "%AGPath%%SERIES%%Cust%\%InvNo% %Job%\materials\yyyy.mm.dd Files Received"

mkdir "%AGPath%%SERIES%%Cust%\%InvNo% %Job%\HSD"

mkdir "%AGPath%%SERIES%%Cust%\%InvNo% %Job%\Design"

mkdir "%AGPath%%SERIES%%Cust%\%InvNo% %Job%\LFC"

mkdir "%AGPath%%SERIES%%Cust%\%InvNo% %Job%\PROOF"

CLS

echo Process Complete

Pause

goto end

:Cancel

CLS

echo Process canceled by user.

Pause

goto end

:END

I know my code is probably junk, but hey. Thanks for any help!

Link to comment
Share on other sites


I've seen another thread that leads a user through a similar process, but I have no idea how to convert my code to registry entries. Here is the code:

Provide a pointer to it, maybe it can be adapted.

I know my code is probably junk, but hey. Thanks for any help!

Rest assured, it is :yes: (no offence whatever intended :)).

Besides some "style" for which everyone has it's preferences (as an example you need not an :END label in NT batch, since the re is the implied :EOF label), this snippet:

SET /P Appr=Y(yes) N(no) C(cancel):

if '%Appr%' == 'y' goto Appr

if '%Appr%' == 'n' goto BEGIN

if '%Appr%' == 'c' goto Cancel

is WRONG :ph34r: for TWO reasons:

it doesn't take into account small and CAPITAL letters and will "continue" execution if *anything* but y, n or c is input :w00t:

This approach is safer/better:

SET appr=cancel

SET /P Appr=Y(yes) N(no) C(cancel):

if /i '%Appr%' == 'y' goto :Appr

if '/i %Appr%' == 'n' goto :BEGIN

if /i '%Appr%' == 'c' goto :Cancel <- third condition not really needed, *anything* but y, Y, n, N will get to :Cancel

GOTO :Cancel

The yyyy.mm.dd values are not "initialized/set" anywhere, is this really the wanted result, litterally yyyy.mm.dd? :unsure:

jaclaz

Link to comment
Share on other sites

If you learned about HTA and the various scripting langauges that can be used you could

make something like this to present to the end user.

post-5386-0-75071300-1360094998_thumb.pn

<!--February-05-13 Hta And Script By Gunsmokingman Aka Jake1Eye This code is property of Gunsmokingman and Or Jake1Eye and you must have his permission to use. This is only posted as example code and meant only to used as such.--><TITLE>Demo User Input</TITLE><HTA:APPLICATION ID="UserIn"SCROLL="No"SCROLLFLAT ="No"SingleInstance="Yes"ShowInTaskbar="No"SysMenu="No"MaximizeButton="No"MinimizeButton="No"Border="Thin"BORDERSTYLE ="complex"INNERBORDER ="No"Caption="Yes"WindowState="Normal"APPLICATIONNAME="DmUserIn"Icon="%SystemRoot%\explorer.exe"><STYLE type="text/css">Body{Font-Size:9.25pt;Font-Weight:Bold;Font-Family:Segoe Ui, Arial,Tahoma,Comic Sans MS;Color:Black;BackGround-Color:#EFE9E3;Text-Align:Center;Vertical-Align:Top;}TD{Font-Size:8.25pt;Font-Weight:Bold;Font-Family:Segoe Ui, Arial,Tahoma,Comic Sans MS;Color:Black;}.Tbx{Font-Size:8.25pt;Font-Weight:Bold;Font-Family:Segoe Ui, Arial,Tahoma,Comic Sans MS;Color:Black;}BUTTON{Height:15pt;width:60pt;Cursor:Hand;Font:8.05pt;Font-weight:bold;Font-Family:Segoe Ui, Arial,Tahoma,Comic Sans MS;Color:#404040;Text-Align:Center;Vertical-Align:Middle;filter:progid:DXImageTransform.Microsoft.Gradient(StartColorStr='#E5E5E5',EndColorStr='#7D7D7D');Margin:1;Margin-Top:15pt;Padding:2;Border-Left: 1px Transparent;Border-Right: 2px Transparent;Border-Top: 1px Transparent;Border-Bottom: 2px Transparent;}</STYLE><script LANGUAGE='VBScript'>'-> Resize And Place In Approx Center Of ScreenDim Wth, Hht :Wth = int(475) :Hht = int(255)window.ResizeTo Wth, HhtMoveTo ((Screen.Width / 2) - (Wth / 2)),((Screen.Height / 2) - (Hht / 2))'-> Function To Process The Submit ButtonFunction MySubmit()If Len(In1.value) = 0 And Len(In2.value) = 0 And Len(In3.value) = 0 Thenalert("No Textboxes Have Any Information")ElseIf Len(In1.value) >= 1 And Len(In2.value) = 0 And Len(In3.value) = 0 Thenalert("Only TextBox 1 Information : " & In1.value & vbCrlf & _"Please Fill In Textboxes 2 And 3 Then Press Submit")ElseIf Len(In1.value) >= 1 And Len(In2.value) >= 1 And Len(In3.value) = 0 Thenalert("TextBox 1 Information : " & In1.value & vbCrlf & _"TextBox 2 Information : " & In2.value & vbCrlf & _"Please Fill In Textboxes 3 Then Press Submit")ElseIf Len(In1.value) >= 1 And Len(In2.value) >= 1 And Len(In3.value) >= 1 ThenIf Len(In2.value) = 5 Thenalert("Sucess All 3 Textboxes Filled In" & vbCrlf & _"TextBox 1 Information : " & In1.value & vbCrlf & _"TextBox 2 Information : " & In2.value & vbCrlf & _"TextBox 3 Information : " & In3.value)Elsealert("Error Needs The Last Five Digits From Invoice Number : " & In2.value)End IfEnd IfEnd Function</SCRIPT><BODY><!-- Customer Name Area --><TABLE><TD Style='width:101;'>Customer Name</TD><TD><INPUT Type='TextBox' ID='In1' Class='Tbx' Size='40' MAXLENGTH='128'><TD></TABLE><!-- Two Textboxes Start --><TABLE><!-- Invoice Number Area --><TD Style='width:101;'>Invoice Number</TD><TD><INPUT Type='TextBox' ID='In2' Class='Tbx' Size='5' MAXLENGTH='5'Style='Margin-Right:15;' Title="Use Only The Last Five DigitsOf The Invoice Number"></TD><!-- Type Of Job Area --><TD Style='width:101;'>Type Of Job</TD><TD><INPUT Type='TextBox' ID='In3' Class='Tbx' Size='10' MAXLENGTH='15'><TD></TABLE><!-- Buttons Start --><BUTTON ID='Bn1' OnClick='MySubmit()'>Submit</BUTTON><BUTTON ID='Bn2' OnClick='window.close()'>Close</BUTTON><BODY>
Link to comment
Share on other sites

Jaclaz, yes, the yyyy.mm.dd is literal. The date correlates to the date of files received, which may not be the day the script is run. I'm including it to show the proper format. Thanks so much for your suggestions. Now if I could just integrate it into the context shell somehow. I'm at a loss there. That other thread tells me that the potential is there, but I have no idea how to approach converting the syntax to registry entries.

Gunskokingman,

Wow, that's very nice, and looks like a much nicer way to present it. Unfortunately you lost me at HTA. I couldn't even find that on wikipedia. (I don't think you fully appreciate the breadth of my ignorance. :unsure: ) It looks like a vbscript, which I've worked with a little in the past, but mostly by reverse engineering existing code. The demo works great. Now I just have to figure out how to make it do work with the input and integrate it into the context menu. Thanks for getting me started!

Link to comment
Share on other sites

That other thread tells me that the potential is there, but I have no idea how to approach converting the syntax to registry entries.

And - AGAIN - can you post a link to THAT thread (so that possibly we can see if THAT sollution may be adapted to your issue?

Generic "context shell" advice:

http://wstudios.home.xs4all.nl/Associate/index.html

BTW "conttext" of WHAT :w00t: ? (like folder, file, desktop, etc. )

I.e. are you looking to add it to right click when WHAT is selected/in focus?

Example for Desktop:

http://www.howtogeek.com/howto/windows-vista/add-any-application-to-the-desktop-right-click-menu-in-vista/

JFYI ;):

http://en.wikipedia.org/wiki/HTA

http://en.wikipedia.org/wiki/HTML_Application

jaclaz

Edited by jaclaz
Link to comment
Share on other sites

Oh, HT(ML)A. I did see that in the list, but thought HTML must be wrong. Nope. Just me. (Here's what I figured he was talking about: http://en.wikipedia.org/wiki/Hierarchically_tiled_array)

I would like to add this app to the right-click context menu of Windows Explorer in Win 7 (32 and 64). I suppose I shouldn't have assumed the batch file's function would have made that obvious.

Here's the post I Googled that lead me here:

Thanks. You've given me a lot of good info to look into. I really like the VB interface, so I will try to develop what Gunsmokingman has provided as well.

Link to comment
Share on other sites

Good :).

The reg file posted here:

will do that alright (to add to a folder context menu)

AGAIN, to WHICH context menu do you want to add the .hta?

Context means "contextual to something" (or "linked" to something), usually an object that is selected, (like as said examples, folder, file, desktop, etc.) to WHICH of these objects do you want to "link" the right click menu entry?

jaclaz

Link to comment
Share on other sites

Jaclaz, I understand the concept of context. I wish I knew better how to covey the context I mean. It should be available within Windows Explorer, -the file browser window, in panes where the files and directories are listed. It's the same context within Windows Explorer wherein one would find; View, Group By, Sort By, Refresh, Properties, etc. Is there something I I'm not getting?

I've worked up a flowchart to help me think through the logic of what needs to happen. Thoughts/suggestions welcome:

TU5TSnL.png

Edited by 13ruce
Link to comment
Share on other sites

Nice Flow Chart, but to many yes/no/cancel for my liking

1:\ Collect all information needed

2a:\ Confirm information

2b:\ redo if wrong,

2c:\ then offer to exit and do nothing

3:\ Process information to the various varibles

4:\ Check for folder,

5:\ Process all information

6:\ Finish dialog if needed

Link to comment
Share on other sites

Thanks for you input. There is only one Yes/No/Cancel (at the confirmation stage). The first choice is only Next or Cancel, and is available in case the user inadvertently invoked the app. I think having an "out" is appropriate in both stages of the process. The last choice is internal only, and checks to see if the folder already exists. Certainly we don't need to create an existing directory, so it seems appropriate to end the process there. However, maybe it would be a good idea to open the browser to that location if it does exist before ending.

Link to comment
Share on other sites

Confirmation, user makes sure all info there if not then ask user to quit or redo

If all information is correct then ask yes to go on or no to quit

Then process all the varibles, run them threw the script, option finish

I dont like having a window open to some folder for no reason.

Link to comment
Share on other sites

I dont like having a window open to some folder for no reason.

In our workflow, if the user gets that far, they have work to do in that folder. It can be inferred that the user isn't already viewing that folder (else they would not have invoked the app), so it makes sense to open that location as a convenience. Does that makes sense?

Link to comment
Share on other sites

Code Update when all three textboxes are filled in, then it ask yes to go on,no and redo, cancel to close


If Len(In2.value) = 5 Then
Dim A :A=MsgBox("Is All The Information Correct" & vbCrlf & _
"TextBox 1 Information : " & In1.value & vbCrlf & _
"TextBox 2 Information : " & In2.value & vbCrlf & _
"TextBox 3 Information : " & In3.value & vbCrlf & vbCrlf & _
"Ok To Continue" & vbCrlf & "No Redo The Information" & vbCrlf & _
"Cancel To Close And Exit",4131)
If A = 6 Then
alert("Script Place Holder For Yes Actions")
ElseIf A = 7 Then
In1.value="" :In2.value="" :In3.value="" :
ElseIf A = 2 Then
window.close()
End If
Else
alert("Error Needs The Last Five Digits From Invoice Number : " & In2.value)
End If

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...