MSFN Forum: Environment variables - MSFN Forum

Jump to content



Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Environment variables How do I put the output of one program into them? Rate Topic: -----

#1 User is offline   Speeddymon 

  • Advanced Member
  • PipPipPip
  • Group: Members
  • Posts: 323
  • Joined: 04-September 06

Posted 05 October 2009 - 10:33 AM

Firstly, is it possible to put the output of a program I am running into an environment variable, or multiple, and if so, how do I do it?

What I'm trying to do is take a directory listing and put each line of output into an environment variable which I can then run through a for loop. I'd use shift to shift each new directory I want to go to into %1. The goal is to extract a bunch of rar files in different directories without knowing the full path to each .rar file. Basically a mass extract.

Something like the following pseudo code:

@echo off
for %%dirname in (dir /a:d /o:gne /b /s) do cd %%dirname rar x *.rar


It gets all of the directories below the current, traverses them, extracts whatever rar file is in that directory (they are all old style rars with the .rar -> .r00 -> .r01 etc extensions), and then moves on to the next directory.


#2 User is offline   DigeratiPrime 

  • MSFN Junkie
  • Group: Super Moderator
  • Posts: 3,490
  • Joined: 18-August 04
  • OS:Windows 7 x64
  • Country: Country Flag

Posted 05 October 2009 - 02:41 PM

You can pipe a program output to another program using the | character such as
ipconfig | clip

As for your situation I would probably use Search to find all the RARs, select and move them to the target folder, then select and extract all of them from the context menu.

WinRAR does ship with a cmd line tool called rar.exe

Quote

RAR 3.90 Copyright © 1993-2009 Alexander Roshal 16 Aug 2009
Registered to Vinayak Ganapathy

Usage: rar <command> -<switch 1> -<switch N> <archive> <files...>
<@listfiles...> <path_to_extract\>

<Commands>
a Add files to archive
c Add archive comment
cf Add files comment
ch Change archive parameters
cw Write archive comment to file
d Delete files from archive
e Extract files to current directory
f Freshen files in archive
i[par]=<str> Find string in archives
k Lock archive
l[t,b] List archive [technical, bare]
m[f] Move to archive [files only]
p Print file to stdout
r Repair archive
rc Reconstruct missing volumes
rn Rename archived files
rr[N] Add data recovery record
rv[N] Create recovery volumes
s[name|-] Convert archive to or from SFX
t Test archive files
u Update files in archive
v[t,b] Verbosely list archive [technical,bare]
x Extract files with full path

<Switches>
- Stop switches scanning
ac Clear Archive attribute after compression or extraction
ad Append archive name to destination path
ag[format] Generate archive name using the current date
ai Ignore file attributes
ao Add files with Archive attribute set
ap<path> Set path inside archive
as Synchronize archive contents
av Put authenticity verification (registered versions only)
av- Disable authenticity verification check
c- Disable comments show
cfg- Disable read configuration
cl Convert names to lower case
cu Convert names to upper case
df Delete files after archiving
dh Open shared files
dr Delete files to Recycle Bin
ds Disable name sort for solid archive
dw Wipe files after archiving
e[+]<attr> Set file exclude and include attributes
ed Do not add empty directories
en Do not put 'end of archive' block
ep Exclude paths from names
ep1 Exclude base directory from names
ep2 Expand paths to full
ep3 Expand paths to full including the drive letter
f Freshen files
hp[password] Encrypt both file data and headers
id[c,d,p,q] Disable messages
ieml[addr] Send archive by email
ierr Send all messages to stderr
ilog[name] Log errors to file (registered versions only)
inul Disable all messages
ioff Turn PC off after completing an operation
isnd Enable sound
k Lock archive
kb Keep broken extracted files
m<0..5> Set compression level (0-store...3-default...5-maximal)
mc<par> Set advanced compression parameters
md<size> Dictionary size in KB (64,128,256,512,1024,2048,4096 or A-G)
ms[ext;ext] Specify file types to store
mt<threads> Set the number of threads
n<file> Include only specified file
n@ Read file names to include from stdin
n@<list> Include files listed in specified list file
o[+|-] Set the overwrite mode
oc Set NTFS Compressed attribute
or Rename files automatically
os Save NTFS streams
ow Save or restore file owner and group
p[password] Set password
p- Do not query password
r Recurse subdirectories
r- Disable recursion
r0 Recurse subdirectories for wildcard names only
ri<P>[:<S>] Set priority (0-default,1-min..15-max) and sleep time in ms
rr[N] Add data recovery record
rv[N] Create recovery volumes
s[<N>,v[-],e] Create solid archive
s- Disable solid archiving
sc<chr>[obj] Specify the character set
sfx[name] Create SFX archive
si[name] Read data from standard input (stdin)
sl<size> Process files with size less than specified
sm<size> Process files with size more than specified
t Test files after archiving
ta<date> Process files modified after <date> in YYYYMMDDHHMMSS format
tb<date> Process files modified before <date> in YYYYMMDDHHMMSS format
tk Keep original archive time
tl Set archive time to latest file
tn<time> Process files newer than <time>
to<time> Process files older than <time>
ts<m,c,a>[N] Save or restore file time (modification, creation, access)
u Update files
v Create volumes with size autodetection or list all volumes
v<size>[k,b] Create volumes with size=<size>*1000 [*1024, *1]
vd Erase disk contents before creating volume
ver[n] File version control
vn Use the old style volume naming scheme
vp Pause before each volume
w<path> Assign work directory
x<file> Exclude specified file
x@ Read file names to exclude from stdin
x@<list> Exclude files listed in specified list file
y Assume Yes on all queries
z[file] Read archive comment from file


#3 User is offline   jaclaz 

  • The Finder
  • Group: Developers
  • Posts: 9,095
  • Joined: 23-July 04
  • OS:none specified
  • Country: Country Flag

Posted 05 October 2009 - 05:03 PM

View PostSpeeddymon, on Oct 5 2009, 06:33 PM, said:

Something like the following pseudo code:

@echo off
for %%dirname in (dir /a:d /o:gne /b /s) do cd %%dirname rar x *.rar


It gets all of the directories below the current, traverses them, extracts whatever rar file is in that directory (they are all old style rars with the .rar -> .r00 -> .r01 etc extensions), and then moves on to the next directory.


Something like this:
@echo off
for /F  "tokens=1 delims=" %%A in ('dir /a:d /o:gne /b /s') do cd "%%A"& rar x *.rar


Reference:
http://www.robvander...e.com/ntfor.php
http://www.robvander...ntfortokens.php

Alternative:
@echo off
FOR /F  "tokens=1 delims=" %%A in ('dir  /b /s *.rar') DO (
CD "%%~dpA"
rar x "%%~nxA"
)


jaclaz

This post has been edited by jaclaz: 06 October 2009 - 01:52 AM


#4 User is offline   Speeddymon 

  • Advanced Member
  • PipPipPip
  • Group: Members
  • Posts: 323
  • Joined: 04-September 06

Posted 05 October 2009 - 06:58 PM

This ended up working for me, full code, use and modify as needed

@ECHO off
ECHO Starting Batch Extract
ECHO Adding RAR and ECM to PATH
SETLOCAL PATH=%PATH%;C:\Program Files (x86)\WinRAR;C:\Program Files (x86)\ECM
ECHO Parsing .part01.rar style files
FOR /f "usebackq tokens=*" %%a IN (`dir /a:-d /b /o:gne /s *.part01.rar`) DO (ECHO Changing to %%~dpa & cd %%~dpa & rar e %%~nxa Extracted\)
ENDLOCAL


The purpose of this program is to take a bunch of ISO images I made a long time ago, extract them one at a time, then run a program called ECM on them to remove the error code stuff from each image file, then recompress it with 7zip, and delete the original rars and the extracted iso and ecm file. It saves me about 50mb per image after compression. That may not seem like a lot, until you consider that I make a backup of everything I ever buy bc I am bad with scratching cd's. I have a 1tb terastation nearly full of images like that (around 700GB of actual usable drive space with raid 5).

I've removed the part of the for loop that runs ECM, recompresses the data with 7zip and removes the originals plus extracted stuff.

I had to use the usebackq option to the for loop to get it to process the dir command, and set tokens=* to get it to output the full file name including spaces into %%a

Hope this helps someone else in the future. Credit for some of the code goes to computerhope.com.

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users



All trademarks mentioned on this page are the property of their respective owners
Copyright © 2001 - 2011 msfn.org
Privacy Policy