Unix Tip: Use your Unix scripting skills to write a batch file

By Sandra Henry-Stocker, ITworld.com |  Operating Systems, drive mapping, Sandra Henry-Stocker Add a new comment

Attaching a remote drive or directory on a Windows box is called "drive mapping" though the process is essentially the same as what we call mounting in the Unix world. While I rarely spend any significant time working on the Windows end of a Samba connection, I recently had an opportunity to assist a user who was tired of repeatedly having to manually connect directories from a couple of Solaris servers equipped with samba for sharing directories with select Windows desktops.

The solution was to whip up a batch file that mapped the drives on login. Batch files, though far less sophisticated than their Unix shell script counterparts, nonetheless have many of the important features that I have become accustomed to working with on my Unix systems. These include such things as redirection, testable return codes, the ability to test for the existence of a file and the equivalent of /dev/null for discarding command output, errors and all.

Batch files can include comments (lines that stat with "REM" for remark or the less distracting "::"). They provide a looping mechanism that uses the syntax "FOR %%VAR IN (LIST) DO". They provide a command (CHOICE) that works like a case statement. There is even a FIND command that works like grep. While the language still seems primitive in comparison to bash and perl, I was surprised that I was easily able to write a script that did what I needed it to do and automate the process. Admittedly, it was splattered with GOTOs -- something that would have horrified my CS professors from decades ago. Still, it was a functional language and I was pleased that I managed to mimic what I would have done on a Solaris or Linux system on a Windows XP box.

The command that is used to map drives on a Windows box is called "NET USE". While there is a GUI process for mapping drives, I prefer to open a DOS command window to view and modify my drive mappings to any point and click operation.

NET USE without arguments prints a list of the drives that are mapped along with any that were previously mapped and since disconnected. The command is similar to the Unix mount command.


> NET USE
Status Local Remote Network

-------------------------------------------------------------------------------
OK L: \\central\Library Microsoft Windows Network
Unavailable M: \\bigserver\shs Microsoft Windows Network
Disconnected P: \\bug-tracker\projects Microsoft Windows Network
OK R: \\smokey\reports Microsoft Windows Network

Instead of using mount points to connect drives to a system, Windows systems assign letters to each drive. So you can have an alphabet's worth of mappings at any point in time. A:, C: and D: are generally assigned to (frequently absent) floppy drives, the system's hard disk and CDROM. You are free to use the others however you see fit.

To map a drive, use the syntax "NET USE <letter> \\host\directory". For example, "NET USE R: \\smokey\reports". To supply a username and password with the NET USE command, you can add it on the command line like this:


> NET USE R: \\smokey\reports password /USER:alice

Return codes in batch are stored in a variable named %ERRORLEVEL% (or "ERRORLEVEL"). Much like you might test for the successful completion of a command in a bash script by looking at $?, you can determine whether a batch command was successfully executed by evaluating the content of %ERRORLEVEL%. Here's an example:


if not %ERRORLEVEL% 0 goto OOPS

The capitalization is arbitrary. You could also do the same thing with "if not errorlevel 0 goto oops".

Putting this together, we might try to map a drive and then check whether the mapping was successful:


NET USE R: \\smokey\reports password /USER:alice
if not %ERRORLEVEL% 0 goto OOPS
...
:OOPS
echo Drive mapping failed
exit

Since "stale" drive mapping associations might interfere with your attempt to map the drive afresh, however, you might need to delete a drive mapping before reinstating it. To avoid sending alarming messages to your use, however, you might want to squelch any messages that would be displayed if you tried to delete a drive that wasn't currently mapped.

No problem:


NET USE R: /delete 2> NUL
NET USE R: \\smokey\reports password /USER:alice 2> NUL
if not %ERRORLEVEL% 0 goto OOPS
...
:OOPS
echo Drive mapping failed
exit

    Add a comment

    Post a comment using one of these accounts
    Or join now
    At least 6 characters

    Note: Comment will appear soon after you have activated your account.
    Obscene/spam comments will be removed and accounts suspended.
    The information you submit is subject to our Privacy Policy and Terms of Service.

    ITworld LIVE

    Operating SystemsWhite Papers & Webcasts

    White Paper

    Microsoft Enterprise Agreement Program Overview

    Discover how flexible the Microsoft Enterprise Agreement Program is to help you build the right software solution agreement for your business. This paper highlights all the available options-from on-premise software and cloud service solutions, to payment options and enrollment programs, and more.

    White Paper

    Watson - A System Designed for Answers. The future of workload optimized systems design

    Watson is a workload optimized system designed for complex analytics, made possible by integrating massively parallel POWER7 processors and DeepQA technology. Read the white paper about Watson's workload optimized system design.

    See more White Papers | Webcasts

    Ask a question

    Ask a Question