SRL Archive - General

Any batch scripters out there


Le Jingle

2014-11-04 22:08:32

Trying to do relatively simple task:
- given folder a, script.bat is in the folder.
- also, folder a contains driver.java, and results.txt
- script.bat goes into folder a, and discovers many child dir's
- for each child dir's file contents (ex. \folder a\generic child dir\a.java), driver is copied into the folder
- call to compile all the java files with javac *.java, logging output to \folder a\results.txt
- call to run the driver main class over the child dir's files, again logging output to \folder a\results.txt
- repeat process for all child directories listed

New to batch, seems nobody likes to use it, but it's still of use.
I'm stuck at trying to locate path-relative files (like going up and down a dir) in calls (something like javac *java >> ..\results.txt)

help much appreciated
-lj

Turpinator

2014-11-04 22:36:56

@Home;

Brandon

2014-11-04 23:27:15

Untested:


@echo off
for /r /d %%f in (*) do pushd "%%f" & (copy /Y "%~dp0\driver.java" "%%f\driver.java") & for /f "delims=" %%i in ('dir /s /B *.java') do ((javac "%%i" >> "%~dp0\results.txt") & (java "%%~ni" >> "%~dp0\results.txt")) & popd

Le Jingle

2014-11-04 23:57:20

closest I could get/can get for the while:


for /r /d %%g in (*) do (
pushd %%g
::echo now in folder %%g
xcopy ..\Driver.java %%g
call :labelcmds > ..\results.txt
exit /b
:labelcmds
javac *.java
java Driver
for %%h in (*.class) do (
java Driver %%h false
java Driver %%h true
)
popd
)
pause
Seems to miss driver

Ex. Dir layout:
\folder a\
\folder a\script.bat
\folder a\Driver.java
\folder a\subdir1\
\folder a\subdir2\
\folder a\subdirN\

Brandon

2014-11-05 00:53:09

@Le Jingle; Try this:

The layout I used..

C:/Users/Brandon/Desktop/Test Folder:

a\aa
a\ab
a\ac

b\ab
b\bb
b\bc

c\ca
c\cb
c\cc

driver.java
meh.bat


Then the batch contains:

@echo off
for /r /d %%f in (*) do (
copy /Y "%~dp0\driver.java" "%%f\driver.java"
)

for /f "delims=" %%i in ('dir /s /B *.java') do (
javac "%%i" >> "%~dp0\results.txt"
java "%%~ni" >> "%~dp0\results.txt"
echo "In folder: %%~pi"
)

and the driver contains:


public class driver {
public static void main(String args[]) {
System.out.println("Running..");
}
}


and the results are:

C:/Users/Brandon/Desktop/Test Folder:

a\aa\driver.java
a\ab\driver.java
a\ac\driver.java

b\ab\driver.java
b\bb\driver.java
b\bc\driver.java

c\ca\driver.java
c\cb\driver.java
c\cc\driver.java
driver.java
meh.bat
results.txt


Console output is:


C:\Users\Brandon\Desktop\Test Folder>meh.bat
1 file(s) copied.
1 file(s) copied.
1 file(s) copied.
1 file(s) copied.
1 file(s) copied.
1 file(s) copied.
1 file(s) copied.
1 file(s) copied.
1 file(s) copied.
1 file(s) copied.
1 file(s) copied.
1 file(s) copied.
"In folder: \Users\Brandon\Desktop\Test Folder\"
"In folder: \Users\Brandon\Desktop\Test Folder\a\"
"In folder: \Users\Brandon\Desktop\Test Folder\a\aa\"
"In folder: \Users\Brandon\Desktop\Test Folder\a\ab\"
"In folder: \Users\Brandon\Desktop\Test Folder\a\ac\"
"In folder: \Users\Brandon\Desktop\Test Folder\b\"
"In folder: \Users\Brandon\Desktop\Test Folder\b\ba\"
"In folder: \Users\Brandon\Desktop\Test Folder\b\bb\"
"In folder: \Users\Brandon\Desktop\Test Folder\b\bc\"
"In folder: \Users\Brandon\Desktop\Test Folder\c\"
"In folder: \Users\Brandon\Desktop\Test Folder\c\ca\"
"In folder: \Users\Brandon\Desktop\Test Folder\c\cb\"
"In folder: \Users\Brandon\Desktop\Test Folder\c\cc\"

Results.txt output is:


Running..
Running..
Running..
Running..
Running..
Running..
Running..
Running..
Running..
Running..
Running..
Running..
Running..

Le Jingle

2014-11-05 02:05:39

foo.java:

public class foo {
private String ziltch;
public foo(String s) {
ziltch = s;
}
public String toString() {
return ziltch;
}
}

bar.java

public class bar {
private int baddaboom;
public foo(int n) {
baddaboom = n;
}
public String toString() {
return baddaboom;
}
}

driver.java

public class driver {
public static void main(String[] args) {
foo f = new foo("F");
bar b = new bar(5);
System.out.println(f.toString() + b.toString());
try {
f.equals(b);
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}

directory structure

\Test Folder\
\Test Folder\results.txt
\Test Folder\script.bat
\Test Folder\driver.java
\Test Folder\dir-1\foo.java
\Test Folder\dir-1\bar.java
\Test Folder\dir-2\foo.java
\Test Folder\dir-2\bar.java
\Test Folder\dir-3\foo.java
\Test Folder\dir-3\bar.java
\Test Folder\dir-N\foo.java
\Test Folder\dir-N\bar.java

> Copy in driver.java for ea. sub-dir
> javac *.java
> java driver
(store java driver runtime output/errors to log in appending results.txt, plus indexresults.txt per ea. sub-dir [ideal])

Brandon

2014-11-05 03:22:09

From: Le Jingle

> Copy in driver.java for ea. sub-dir
> javac *.java
> java driver
(store java driver runtime output/errors to log in appending results.txt, plus indexresults.txt per ea. sub-dir [ideal])



Your java code has errors.. I fixed them then ran the following to produce what you requested..


@echo off
for /r /d %%f in (*) do (
copy /Y "%~dp0\driver.java" "%%f\driver.java"
)

for /f "delims=" %%i in ('dir /s /B driver.java') do (
pushd %~dp0
cd %%~pi
javac *.java >> "%~dp0\results.txt"

for /f "delims=" %%j in ('java driver') do (
echo %%j >> "%~dp0\results.txt"
echo %%j >> "indexresults.txt"
)

echo "In folder: %%~pi"
popd
)

If using powershell or linux, use the tee command instead of dual echo's. Anyway.. sleep time for me.. so I'll check back later and see if this is what you wanted..

Le Jingle

2014-11-05 14:08:55

From: Brandon
Your java code has errors.. I fixed them then ran the following to produce what you requested..


@echo off
for /r /d %%f in (*) do (
copy /Y "%~dp0\driver.java" "%%f\driver.java"
)

for /f "delims=" %%i in ('dir /s /B driver.java') do (
pushd %~dp0
cd %%~pi
javac *.java >> "%~dp0\results.txt"

for /f "delims=" %%j in ('java driver') do (
echo %%j >> "%~dp0\results.txt"
echo %%j >> "indexresults.txt"
)

echo "In folder: %%~pi"
popd
)

If using powershell or linux, use the tee command instead of dual echo's. Anyway.. sleep time for me.. so I'll check back later and see if this is what you wanted..


Thanks this quite close to shell sciprt am use:

rm results.txt
for i in /users/name/documents/file/* ; do
if [ -d "${i}" ] ; then
passed=0
cd $i
echo '**********************************************' >> ../results.txt
echo $i
echo $i >> ../results.txt
echo '**********************************************' >> ../results.txt

cp ../driver.java .
cp ../codestats.java .

javac *.java
for j in {0..2}; do
java driver $j false >> ../results.txt
rc=$?
if [[ $rc != 0 ]] ; then
passed=1
fi

java driver $j true >> ../results.txt
rc=$?
if [[ $rc != 0 ]] ; then
passed=1
fi
done

java codestats afile.java >> ../results.txt

if [ "$passed" = 0 ] ; then
echo 'end tests' >> ../results.txt
fi
echo ' of 30' >> ../results.txt
echo ' ' >> ../results.txt
cd ..
fi

done

some diff's

also quite same in outcome thaan any my attempt

am stil attempting the dos batch now