02-18-2011
I know that, the sample of code I posted was copied from the interactive command-line, hence single-% denoted variables. I've been reading the help file for "for /?" and it's pretty worthless and borderline esoteric!
I'm not certain whether my DEVE is working correctly.
Thanks for your suggestion though.
---------- Post updated at 08:04 PM ---------- Previous update was at 06:53 PM ----------
I'm not sure what worked so differently for me this time, but I was able to successfully execute the code above as intended using the following syntax. This is for your reference.
at the interactive command-line, you'll use single-%-denoted iteration variables, but in a batch script, you'll use double-%-denoted variables for the iteration statements/command sets. I'll demonstrate batch-script form, italicized commentary is FYI, the bold-print characters are the actual script commands.
SETLOCAL ENABLEDELAYEDEXPANSION
this line turns on delayed environment variable expansion, necessary to store and expand variables set within the for loop. Otherwise, variable values are expanded as the command is parsed (before execution)
for /f "usebackq" %%A in (`dir /b C:\directory\`) do (
this first line is using %%A as the iterator variable, storing each line of output from dir /b (the b option is equivalent to ls -1 in UNIX)
set origname=%%A
stores the value of %%A into a variable (origname) that can be manipulated later in the loop iteration
set eighth=!origname:~7,1!
this stores the eighth character of origname variable, the variable must now be expanded using exclamation points for flags instead of percent-symbols. But is still subject to all the rules of regullar command-shell variables, including string manipulation.
if !eighth!==3 (
begin if condition
move /Y C:\directory\!origname! C:\directory\output\!origname:~0,7!5!origname:~8,6!
based on result of if comparison, moves original file to a parsing directory for a program that uses 8th character to process based on a rule set, as you can (or cannot) tell--the original filename is expected to be a 14-character string and we're modifying the 8th character to conform to a ruleset for processing) else (
move /Y C:\directory\!origname! C:\directory\output\!origname:~0,7!3!origname:~8,6!
)
)
The else condition is a coverall for files that do conform to a ruleset but erred for one reason or another and thus processes them using a different ruleset.
Hopefully this makes sense to you. Initially, when the command-line was expanding the variables, it was printing some funky stuff. It seemed to just start working, but who knows--I've been staring at this damm screen so long.
ProGrammar
10 More Discussions You Might Find Interesting
1. UNIX for Dummies Questions & Answers
Hi everyone,
I am trying to set up the .profile for a user I have just created. In trying to set up the shell variables, I want to make the shell be korn shell (default shell i believe is Borne shell), so, this is what I did:
SHELL=/usr/bin/ksh
export SHELL
Whenl executing the .profile,... (1 Reply)
Discussion started by: rachael
1 Replies
2. Shell Programming and Scripting
If I set a variable within a while-read loop, sometimes it's local to the loop, sometimes it's global, depending on how the loop is set up. I'm testing this on a Debian Lenny system using both bash and dash with the same results.
For example:
# Pipe command into while-read loop
count=
ls -1... (2 Replies)
Discussion started by: mjd_tech
2 Replies
3. UNIX for Dummies Questions & Answers
Hi All
How can i control for loop with two different variables in csh shell
Regards
Nikhil (1 Reply)
Discussion started by: Nikhilindurkar
1 Replies
4. UNIX for Dummies Questions & Answers
I nedd help on the below highlited one.
can any one explain on this,How its work in shell scripting.. then that will be very great full...
L_ABCD=${L_DBG:=N}
Thanks
Muddasas (3 Replies)
Discussion started by: muddasani
3 Replies
5. Shell Programming and Scripting
Hi,
does anybody knows how to manage, that the filenames are assigned to a variable in a loop afer getting them with set command in a ksh, like:
set B*.txt
i=1
c=$#
x=$((c+1))
echo "$x"
while ] ; do
_ftpfile$i="$"$i
echo "$_ftpfile$i"
i=$((i+1))
done
The first echo returns,... (2 Replies)
Discussion started by: spidermike
2 Replies
6. UNIX for Dummies Questions & Answers
Hello,
I have two files File1 & File2.
File1
76 135
136 200
250 345
....
File2
1 24
1 35
1 36
1 72
....
I want to get all the values form File2 corresponding to the range in File 1 and feed it to a program. Is the code below right? Can I pass shell variables to awk in this... (2 Replies)
Discussion started by: Gussifinknottle
2 Replies
7. Shell Programming and Scripting
Hi,
I am having a bit of trouble with the below code:
file=/path/to/file
for i in 03 06 07 21; do
if ; then
eval count$i=`grep -c word $file-$i`
fi
done
Totalcount=0
for i in 03 06 07 21; do
if ; then
echo $count$i variable not exist;
else Tcount=`expr $Tcount + $count$i`;
fi... (3 Replies)
Discussion started by: brunlea
3 Replies
8. Shell Programming and Scripting
Well,
this command has served me quite well under DOS
for %%X in (*.txt) do COMMAND
however in linux it just outputs:
"./install.sh line 1: '%%x': not a valid identifier.
Ideas ?
Thanks in advance (2 Replies)
Discussion started by: pasc
2 Replies
9. Shell Programming and Scripting
Hello All.
Good Afternoon.
I need one small help regarding setting of env variables for a particular host by getting it from the DB.
For ex :
1. I am using LOCALHOST.
2. When I run a ./hostset.sh it should pick up the Oracle home details from associated DB and set it.
Please... (1 Reply)
Discussion started by: PavanPatil
1 Replies
10. Shell Programming and Scripting
Hi guys!
Kind of new to bash scripting and now I'm stuck.
I need to curl with these variables:
"{ \"nodename\": \"$1\", \"ipaddress\": \"$2\", \"poolname\": \"$3\", \"port\": \"$4\", \"loadbalancer\" : \"$5\" }"
and my input_file.txt contains
server001 10.10.10.01 serverpool1 80... (4 Replies)
Discussion started by: yort
4 Replies
LEARN ABOUT OSX
cgi::pretty
CGI::Pretty(3pm) Perl Programmers Reference Guide CGI::Pretty(3pm)
NAME
CGI::Pretty - module to produce nicely formatted HTML code
SYNOPSIS
use CGI::Pretty qw( :html3 );
# Print a table with a single data element
print table( TR( td( "foo" ) ) );
DESCRIPTION
CGI::Pretty is a module that derives from CGI. It's sole function is to allow users of CGI to output nicely formatted HTML code.
When using the CGI module, the following code:
print table( TR( td( "foo" ) ) );
produces the following output:
<TABLE><TR><TD>foo</TD></TR></TABLE>
If a user were to create a table consisting of many rows and many columns, the resultant HTML code would be quite difficult to read since
it has no carriage returns or indentation.
CGI::Pretty fixes this problem. What it does is add a carriage return and indentation to the HTML code so that one can easily read it.
print table( TR( td( "foo" ) ) );
now produces the following output:
<TABLE>
<TR>
<TD>foo</TD>
</TR>
</TABLE>
Recommendation for when to use CGI::Pretty
CGI::Pretty is far slower than using CGI.pm directly. A benchmark showed that it could be about 10 times slower. Adding newlines and spaces
may alter the rendered appearance of HTML. Also, the extra newlines and spaces also make the file size larger, making the files take longer
to download.
With all those considerations, it is recommended that CGI::Pretty be used primarily for debugging.
Tags that won't be formatted
The following tags are not formatted: <a>, <pre>, <code>, <script>, <textarea>, and <td>. If these tags were formatted, the user would see
the extra indentation on the web browser causing the page to look different than what would be expected. If you wish to add more tags to
the list of tags that are not to be touched, push them onto the @AS_IS array:
push @CGI::Pretty::AS_IS,qw(XMP);
Customizing the Indenting
If you wish to have your own personal style of indenting, you can change the $INDENT variable:
$CGI::Pretty::INDENT = " ";
would cause the indents to be two tabs.
Similarly, if you wish to have more space between lines, you may change the $LINEBREAK variable:
$CGI::Pretty::LINEBREAK = "
";
would create two carriage returns between lines.
If you decide you want to use the regular CGI indenting, you can easily do the following:
$CGI::Pretty::INDENT = $CGI::Pretty::LINEBREAK = "";
AUTHOR
Brian Paulsen <Brian@ThePaulsens.com>, with minor modifications by Lincoln Stein <lstein@cshl.org> for incorporation into the CGI.pm
distribution.
Copyright 1999, Brian Paulsen. All rights reserved.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
Bug reports and comments to Brian@ThePaulsens.com. You can also write to lstein@cshl.org, but this code looks pretty hairy to me and I'm
not sure I understand it!
SEE ALSO
CGI
perl v5.16.2 2012-10-11 CGI::Pretty(3pm)