Search This Blog

Loading...

10.23.2006

exec.cmd by Fred Stluka

@echo off
rem -------------------------------------------------------------------------
rem Batch file to execute a command on a set of files.
rem -------------------------------------------------------------------------
rem Revision History:
rem 6/5/1982 Fred Stluka
rem - Initial version for IBM VMS/CMS (FILELIST EXEC)
rem 10/12/1985 Fred Stluka
rem - Initial version for DEC VAX/VMS
rem 10/4/1988 Fred Stluka
rem - Initial version for Unix (find -exec, find -ok)
rem 12/2/1998 Fred Stluka
rem - Initial version for Windows NT
rem 2/3/2005 Fred Stluka
rem - Execute command via "call" in case it's a BAT file.
rem - Expand filenames to fully qualified paths via ~f.
rem - Notes explaining FOR command syntax.
rem $Log$
rem -------------------------------------------------------------------------

rem Turn echo back on if ECHO environment variable equals ON.
if not "%ECHO%"=="" echo %ECHO%

if "%1" == "" goto USAGE
if "%1" == "-?" goto USAGE
if "%1" == "/?" goto USAGE
if not "%OS%" == "Windows_NT" goto NOT_NT

rem Accumulate the DIR options and file specs (everything until "DO").
set DIR_PARAMS=
:GET_DIR_PARAMS
for %%i in (do DO dO Do) do if "%1"=="%%i" goto DO_FOUND
if "%1"=="" goto NO_DO_FOUND
set DIR_PARAMS=%DIR_PARAMS% %1
shift
goto GET_DIR_PARAMS
:DO_FOUND
shift

rem Run the command on the files.
rem
rem Notes:
rem - The /f switch causes FOR to parse each line in a file.
rem - The "Tokens=*" option causes an entire line of the file to be handled
rem at once. (Not required, since this is the default behavior.)
rem - Percent signs must be doubled on FOR loop variables inside BAT files.
rem - The apostrophes cause the DIR command to be evaluated to produce the
rem "file" to be parsed by /f.
rem - The ~f modifier expands the filename in %i to a fully qualified path.
rem - For more info, type: HELP FOR
rem
echo DIR parameters: %DIR_PARAMS%
echo Files to be processed:
for /f "Tokens=*" %%i in ('dir %DIR_PARAMS% /a-d /b') do echo "%%~fi"
rem Note: "echo." echoes a blank line. "echo ." would echo a dot.
echo.
echo Hit Ctrl-C to stop or any other key to continue:
:: pause > nul
for /f "Tokens=*" %%i in ('dir %DIR_PARAMS% /a-d /b') do call :EXECUTE %1 %2 %3 %4 %5 %6 %7 %8 "%%~fi"
goto EXIT

:EXECUTE
echo %1 %2 %3 %4 %5 %6 %7 %8 %9
rem
rem Note: The keyword "call" is needed here. Otherwise, if the first parameter
rem is the name of a BAT file, things get confused. The BAT file is not
rem executed, and the following error is reported:
rem The system cannot find the batch label specified - EXECUTE
rem
call %1 %2 %3 %4 %5 %6 %7 %8 %9
goto EXIT

:NOT_NT
echo Sorry. %0 only runs under Windows NT, 2000, XP, etc. Not 95, 98, ME.
goto EXIT

:NO_DO_FOUND
echo Invalid syntax. Must specify DO.
goto USAGE

:USAGE
echo %0 is a BAT file that executes the specified command on the specified
echo set of files. The files are specified as a set of parameters that would
echo cause the DIR command to select the right set of files.
echo Usage: %0 [dir_params...] DO command
echo Examples: %0 *.* DO type
echo Types all files in the current directory.
echo %0 DO type
echo Types all files in the current directory.
echo %0 /s DO type
echo Types all files in the current directory tree.
echo %0 *.exe DO start /wait /max
echo Runs all EXE files in the current directory, one at a
echo time, waiting for each to finish, in maximized windows.
echo %0 /s /aa c:\*.* DO xcopy /s /m /f
echo Incremental backup. Run with A:\ as the current
echo working directory. Copies all files with archive bit
echo set from the C drive to the current directory tree,
echo clearing the archive bits and echoing the names as
echo the files are copied.
echo %0 /s /a-r DO edit
echo Edit all files that are not readonly in the current
echo directory tree.
goto EXIT

:EXIT

Backup TextPad settings

@echo off

REM This tool makes a complete backup of all your TextPad settings
REM in the Windows Registry.
REM The area of useage is quite wide. You can make custom "workspaces"
REM trough launching different .reg-files. Also, you may set the "prompt for parameters"
REM checkbox in textpad. Also, "Capture output" & "supress until..." sould be checked.
REM
REM In the "Parameters" textfield you can type in the deafult name for a
REM backup. ex: "texpad.reg" or "c:\textpad.reg"
REM
REM As the "initial folder" you can type in a default value, leave it blank or use $FileDir
REM © 2002 Rasmus Andersson [flajm.com / rasmusandersson.com]

REM Dim vars
set KEYPATH=HKEY_CURRENT_USER\Software\Helios\TextPad 4
set BUFILENAME=tps__%date%.reg

REM check for errors
:DOCHECK
if "%BUFILENAME%"=="" goto :REPORTERROR


:DOBACKUP
REG EXPORT "%KEYPATH%" "%BUFILENAME%"



REM Report success
:SUCCESS
echo Registry backup of "%KEYPATH%"
echo successfully saved to "%BUFILENAME%"
goto :ENDBAT


REM reports an error
:REPORTERROR
echo You must specify an output filename for the
echo backup.
echo Example: c:\appbackup.reg, textpad.reg, \\computer\folder\backup.reg


REM Exits and quits
:ENDBAT
EXIT

funcJumper in Textpad (revised)

package funcJumper ;
#!perl

=head1 Copyright

*****************************************
* *
* Copyright (c) 2006, CloinkSoft *
* *
* mailto:Cloink_Friggson@ntlworld.com *
* *
*****************************************

=head1 LineNos - What it does

Interrogates passed filename (appropriately qualified) for it's sub-routine word,
and list each with line-number, especially useful if called from TextPad as a tool
with a "Regexp to match output" of "1", as this allows you to quickly
navigate to a particular function / sub / procedure / whatever match you desire,
by double-clicking the line shown in the Command Results window.

It expects the keyword to be at the beginning of the line, with optional leading spaces,
and it does a case-insensitive match to cater for as many languages as possible.

Note that JavaScript gets special treatment and finds both named functions, and
further methods of those functions, sorting the methods into alphabetical order.

e.g.
function JS_Func(){ null; } // possibly a constructor func for an object
JS_Func.meth1 = function(){ null; } // static meth but caters for .prototyped meths too
lists JS_Func AND JS_Func.method - the latter indented, and a new constructor gets a blank line
before it to help separate one from the next when you have a lot of methods.

I don't program in Java, but I imagine the JS special treatment will apply to that
and many other OO languages too.

=cut


$, = "" ; # between each argument to print ("field" separator)
$\ = "" ; # between each call to print ("record" separator)

my ( $f, $prt, $l, $i, $nuc, $fl, $srch, $js, $t );
@meths; # methods for JS
%mlnos;

format STDOUT =
@>>> @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$l, $prt
.

$f = $ARGV[0];

=head2 Specify your file types and search strings here

The search-string is bracketed so you can give a list of possible words

e.g. Oracle PL/SQL
PROCEDURE|FUNCTION

The sub-routine name can be quoted - for me, this allows me to use the perl-script
against my Oracle table-scripts which call a sub-script prior to each table-definition

e.g. Ora script
@TabIni "TABLE_NAME"

=cut

if( $f =~ /\.js$/ ){ # JavaScript
$js = 1;
$srch = 'function' ;
}
elsif( $f =~ /\.p[lm]||cgi$/ ){ # perl
$srch = 'sub';
}
elsif( $f =~ /\.pk[gbdhs]$/ ){ # Oracle packages
$srch = 'PROCEDURE|FUNCTION';
}
elsif( $f =~ /\.tab$/ ){ # Oracle table script
$srch = 'START ~UD.TabIni';
}
else{
die "Unknown file type.";
}

open IN, $f || die "Can't open $f" ;

while( <IN> ){

if( $_ =~ /^\s*($srch)\s+['"]?(\w+)['"]?/i ){ # " # case-insensitive, optional quotes round word, which will rarely be required but doesn't harm to have 'em, and my tab scripts need it

if( $js && $t ){ # switching from major func to another, but not first major func
$i=-1;
map { $l = $mlnos{$_}; $prt = " $_"; write; }
sort { return( uc $a lt uc $b ? -1 : 1 ) } @meths ;
@meths = ();
@mlnos = ();
print "\n" ; # so don't put a blank line at v top
}

$t = $2;
$l = $.;
$prt = $t;
write;
}

if( $js && $_ =~ /^ *$t\.(prototype\.)?(\w+) *= *function/ ){
push @meths, $2;
$mlnos{$2} = $.;
}
}

close IN;

1;

How-to create shortcuts on Windows with perl

# This code creates a shortcut.

# ---------------------------------------------------------------
# Adapted from VBScript code contained in the book:
# "Windows Server Cookbook" by Robbie Allen
# ISBN: 0-596-00633-0
# ---------------------------------------------------------------

use Win32::OLE;
$Win32::OLE::Warn = 3;

$objWSHShell = Win32::OLE->new('WScript.Shell');

# Pass the path to the shortcut
$objSC = $objWSHShell->CreateShortcut('C:\\Documents and Settings\\yogeorgi\\Desktop\\Shortcut to settings.lnk');

# Description - Description of the shortcut
$objSC->{Description} = 'Shortcut to MyLog settings.txt';

# HotKey – hot key sequence to launch the shortcut
#if one puts space between the + and the ALT SHIFT etc. this raizes exception
$objSC->{HotKey} = 'CTRL+ALT+SHIFT+S';

# IconLocation – Path of icon to use for the shortcut file
$objSC->{IconLocation} = 'notepad.exe, 0';
# 0 is the index

# TargetPath = Path to source file or folder
$objSC->{TargetPath} = 'C:\\Temp\\QARunpack\\settings.txt';

# Arguments – Any additional parameters to pass to TargetPath
$objSC->{Arguments} = 'c:\\mylog.txt';

# WindowStyle – Type of window to create
$objSC->{WindowStyle} = 1;
# 1 = normal; 3 = maximize window; 7 = minimize

# WorkingDirectory – Location of the working directory for the source app
$objSC->{WorkingDirectory} = 'c:\\Temp\\QARunpack';
$objSC->Save();
print "Shortcut to mylog created\n";

10.17.2006

compile a perl project using TextPad

Ok , the next idea would be to compile a whole perl project with the help of the exec.bat by Fred Stluka ...

With the following setting you go recursively and you check each perl file for syntax errors and if found one could jump to it ... (wow this should be submitted to the tips section ; )
so:
1. Create a registry file with the following content and add it to your registry (The number after Tools should be the next number of the command in your Tools menu .. .
#===============COPY_PASTE_START
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Helios\TextPad 4\Tools\30]
"Properties"=hex:01,00,00,00,69,80,00,00,e8,49,00,00
"MenuText"="exec"
"Command"="cmd.exe"
"Parameters"="exec *.pl *.pm *.cgi /s /b do perl -wc "
"Folder"="$FileDir"
"RE"="^.+at (.+) line ([0-9]+)[.,]?"

#===============COPY_PASTE_STOP

and the following exec.bat in your path
#===============COPY_PASTE_START
@echo off
rem -------------------------------------------------------------------------
rem Batch file to execute a command on a set of files.
rem -------------------------------------------------------------------------
rem Revision History:
rem 6/5/1982 Fred Stluka
rem - Initial version for IBM VMS/CMS (FILELIST EXEC)
rem 10/12/1985 Fred Stluka
rem - Initial version for DEC VAX/VMS
rem 10/4/1988 Fred Stluka
rem - Initial version for Unix (find -exec, find -ok)
rem 12/2/1998 Fred Stluka
rem - Initial version for Windows NT
rem 2/3/2005 Fred Stluka
rem - Execute command via "call" in case it's a BAT file.
rem - Expand filenames to fully qualified paths via ~f.
rem - Notes explaining FOR command syntax.
rem $Log$
rem -------------------------------------------------------------------------

rem Turn echo back on if ECHO environment variable equals ON.
if not "%ECHO%"=="" echo %ECHO%

if "%1" == "" goto USAGE
if "%1" == "-?" goto USAGE
if "%1" == "/?" goto USAGE
if not "%OS%" == "Windows_NT" goto NOT_NT

rem Accumulate the DIR options and file specs (everything until "DO").
set DIR_PARAMS=
:GET_DIR_PARAMS
for %%i in (do DO dO Do) do if "%1"=="%%i" goto DO_FOUND
if "%1"=="" goto NO_DO_FOUND
set DIR_PARAMS=%DIR_PARAMS% %1
shift
goto GET_DIR_PARAMS
:DO_FOUND
shift

rem Run the command on the files.
rem
rem Notes:
rem - The /f switch causes FOR to parse each line in a file.
rem - The "Tokens=*" option causes an entire line of the file to be handled
rem at once. (Not required, since this is the default behavior.)
rem - Percent signs must be doubled on FOR loop variables inside BAT files.
rem - The apostrophes cause the DIR command to be evaluated to produce the
rem "file" to be parsed by /f.
rem - The ~f modifier expands the filename in %i to a fully qualified path.
rem - For more info, type: HELP FOR
rem
echo DIR parameters: %DIR_PARAMS%
:: echo Files to be processed:
:: for /f "Tokens=*" %%i in ('dir %DIR_PARAMS% /a-d /b') do echo "%%~fi"
rem Note: "echo." echoes a blank line. "echo ." would echo a dot.
:: echo.
:: echo Hit Ctrl-C to stop or any other key to continue:
:: pause > nul
for /f "Tokens=*" %%i in ('dir %DIR_PARAMS% /a-d /b') do call :EXECUTE %1 %2 %3 %4 %5 %6 %7 %8 "%%~fi"
goto EXIT

:EXECUTE
echo %1 %2 %3 %4 %5 %6 %7 %8 %9
rem
rem Note: The keyword "call" is needed here. Otherwise, if the first parameter
rem is the name of a BAT file, things get confused. The BAT file is not
rem executed, and the following error is reported:
rem The system cannot find the batch label specified - EXECUTE
rem
call %1 %2 %3 %4 %5 %6 %7 %8 %9
goto EXIT

:NOT_NT
echo Sorry. %0 only runs under Windows NT, 2000, XP, etc. Not 95, 98, ME.
goto EXIT

:NO_DO_FOUND
echo Invalid syntax. Must specify DO.
goto USAGE

:USAGE
echo %0 is a BAT file that executes the specified command on the specified
echo set of files. The files are specified as a set of parameters that would
echo cause the DIR command to select the right set of files.
echo Usage: %0 [dir_params...] DO command
echo Examples: %0 *.* DO type
echo Types all files in the current directory.
echo %0 DO type
echo Types all files in the current directory.
echo %0 /s DO type
echo Types all files in the current directory tree.
echo %0 *.exe DO start /wait /max
echo Runs all EXE files in the current directory, one at a
echo time, waiting for each to finish, in maximized windows.
echo %0 /s /aa c:\*.* DO xcopy /s /m /f
echo Incremental backup. Run with A:\ as the current
echo working directory. Copies all files with archive bit
echo set from the C drive to the current directory tree,
echo clearing the archive bits and echoing the names as
echo the files are copied.
echo %0 /s /a-r DO edit
echo Edit all files that are not readonly in the current
echo directory tree.
goto EXIT

:EXIT
#===============COPY_PASTE_STOP

Blog Archive

My Blog List

Video Bar

Loading...

About Me

My Photo
Yordan Georgiev
It is one thing to know what to want, second to really want it, third to know how to do it, fourth to be skillful to do it, fifth to actually do it and last but not least to go on without regrets after having done it. LinkedIn Profile
View my complete profile