Page 1 of 2
batch append not working - DOS
Posted: 2015-06-21T18:41:43-07:00
by FlyingJenny2bucks
Hi, is there something wrong with my code below ? (6.9.0 .Q16.win 7)
Code: Select all
for %%a in (*.jpg) do convert ^
( Blues\%%~na-007-a.jpg Blues\%%~na-007-b.jpg +append ) ^
( Blues\%%~na-007-c.jpg Blues\%%~na-007-d.jpg +append ) ^
( Blues\%%~na-007-e.jpg Blues\%%~na-007-f.jpg +append ) ^
( Blues\%%~na-007-g.jpg Blues\%%~na-007-h.jpg +append ) ^
( Blues\%%~na-007-i.jpg Blues\%%~na-007-j.jpg +append ) ^
( Blues\%%~na-007-k.jpg Blues\%%~na-007-l.jpg +append ) ^
( Blues\%%~na-007-m.jpg Blues\%%~na-007-n.jpg +append ) ^
( Blues\%%~na-007-o.jpg Blues\%%~na-007-p.jpg +append ) ^
-background grey -append Done\%%~na.jpg
The result should be
A C E G I K M O
B D F H J L N P
but instead it does this
A B C D E F G H I J K L M N O P
Re: batch append not working - DOS
Posted: 2015-06-22T01:39:07-07:00
by snibgo
I'm surprised it gives
A B C D E F G H I J K L M N O P
I would expect:
A B
C D
E F
G H
I J
K L
M N
O P
That's what I get, with v6.9.1-0 on Win 8.1.
Anyhow, you have +append and -append the wrong way round. See
http://www.imagemagick.org/script/comma ... php#append
Re: batch append not working - DOS
Posted: 2015-06-22T02:38:34-07:00
by FlyingJenny2bucks
The sad part is it still isn't working. I have reverted to two separate steps to get the desired effect.
A C E G I K M O
B D F H J L N P
Code: Select all
For %%a in (*.jpg) do (
convert Blues\%%~na-007-[a-b].jpg -append Done\%%~na001.jpg
convert Blues\%%~na-007-[c-d].jpg -append Done\%%~na002.jpg
convert Blues\%%~na-007-[d-e].jpg -append Done\%%~na003.jpg
convert Blues\%%~na-007-[f-g].jpg -append Done\%%~na004jpg
convert Blues\%%~na-007-[h-i].jpg -append Done\%%~na005.jpg
convert Blues\%%~na-007-[j-k].jpg -append Done\%%~na006.jpg
convert Done\%%~na00[0-9].jpg -background grey +append Done\%%~na.jpg
del %%~na00?.jpg
)
Re: batch append not working - DOS
Posted: 2015-06-22T09:02:55-07:00
by fmw42
should it not be
Code: Select all
for %%a in (*.jpg) do convert ^
( Blues\%%~na-007-a.jpg Blues\%%~na-007-b.jpg -append ) ^
( Blues\%%~na-007-c.jpg Blues\%%~na-007-d.jpg -append ) ^
( Blues\%%~na-007-e.jpg Blues\%%~na-007-f.jpg -append ) ^
( Blues\%%~na-007-g.jpg Blues\%%~na-007-h.jpg -append ) ^
( Blues\%%~na-007-i.jpg Blues\%%~na-007-j.jpg -append ) ^
( Blues\%%~na-007-k.jpg Blues\%%~na-007-l.jpg -append ) ^
( Blues\%%~na-007-m.jpg Blues\%%~na-007-n.jpg -append ) ^
( Blues\%%~na-007-o.jpg Blues\%%~na-007-p.jpg -append ) ^
-background grey +append Done\%%~na.jpg
where I have swapped the + and - appends
Re: batch append not working - DOS
Posted: 2015-06-22T18:31:01-07:00
by FlyingJenny2bucks
For some reason, thats not working for me. Do I need a version update?
Re: batch append not working - DOS
Posted: 2015-06-22T18:41:14-07:00
by fmw42
FlyingJenny2bucks wrote:For some reason, thats not working for me. Do I need a version update?
You can try upgrading to IM 6.9.1.6 and see. I am not a Windows user, so do not know the proper Windows syntax nor wild card usage. But I do not see where %%a is being used in the rest of the command line. Typically in a for loop as you have it, the argument %%a would be the full file name of the images in the folder. As it is, you seem to be reading every image in the folder and trying to process each one. You need do some string filtering of the files to get only the first part of the filename, so that you do not read every image and can just use the first part of the filename and add -a.jpg, -b.jpg, etc in your command lines.
Otherwise, wait for a Windows IM expert to help or confirm.
Re: batch append not working - DOS
Posted: 2015-06-22T19:45:00-07:00
by FlyingJenny2bucks
I know this is a real clumsy way of doing it but its simple enough for me to understand.
%%a = original bunch of files with original filenames
%%~na-007-a.jpg = Post processed %%a with "-007-a" suffix added to the filename inside folder "Blues"
%%~na.jpg = appended files with the original filenames (i.e. %%a) inside folder "Done"
I can get all of them to do -append or +append but when I try tiling them using parenthesis, they don't work. My ultimate goal is set conditions for appending horizontally or vertically e.g.
Code: Select all
Set Filesize=1000000
::A/B/C (if 3 files exists and file "a" is smaller/equal than 1mb, append them vertically)
For %%a in (*.jpg) do (
IF EXIST "Blues\%%~na-007-c.jpg" AND "Blues\%%~na-007-a.jpg" LEQ %Filessize% (
convert Blues\%%~na-007-a.jpg Blues\%%~na-007-b.jpg Blues\%%~na-007-c.jpg -background grey -append Done\%%~na.jpg
::A/B+C/D+E/F (if 4-6 files exists and file "a" is smaller/equal than 1mb, append them in tiles)
) ELSE IF EXIST "Blues\%%~na-007-d.jpg" AND "Blues\%%~na-007-a.jpg" LEQ %Filessize% (
convert Blues\%%~na-007-a.jpg Blues\%%~na-007-b.jpg -background grey -append Done\%%~naPART1.jpg
convert Blues\%%~na-007-c.jpg Blues\%%~na-007-d.jpg -background grey -append Done\%%~naPART2.jpg
convert Blues\%%~na-007-e.jpg Blues\%%~na-007-f.jpg -background grey -append Done\%%~naPART3.jpg
convert Done\%%~naPART1.jpg Done\%%~naPART2.jpg Done\%%~naPART3.jpg -background grey +append Done\%%~na.jpg
del *PART?.jpg
::A B C D E F (if file "a" is larger than 1mb, append horizontally)
) ELSE IF EXIST "Blues\%%~na-007-a.jpg" AND "Blues\%%~na-007-a.jpg" GTR %Filessize% (
convert ^
Blues\%%~na-007-a.jpg Blues\%%~na-007-b.jpg ^
Blues\%%~na-007-c.jpg Blues\%%~na-007-d.jpg ^
Blues\%%~na-007-e.jpg Blues\%%~na-007-f.jpg ^
-background grey +append Done\%%~na.jpg
)
)
As usual, it is not working
Re: batch append not working - DOS
Posted: 2015-06-22T19:58:36-07:00
by snibgo
Code: Select all
IF EXIST "Blues\%%~na-007-c.jpg" AND "Blues\%%~na-007-a.jpg" LEQ %Filessize% (
That isn't valid syntax (for Windows 8.1). "And" isn't a valid keyword. Even if it was, it wouldn't compare the filesize of a file with an integer.
Code: Select all
for %%a in (*.jpg) do convert ^
( Blues\%%~na-007-a.jpg Blues\%%~na-007-b.jpg -append ) ^
( Blues\%%~na-007-c.jpg Blues\%%~na-007-d.jpg -append ) ^
( Blues\%%~na-007-e.jpg Blues\%%~na-007-f.jpg -append ) ^
( Blues\%%~na-007-g.jpg Blues\%%~na-007-h.jpg -append ) ^
( Blues\%%~na-007-i.jpg Blues\%%~na-007-j.jpg -append ) ^
( Blues\%%~na-007-k.jpg Blues\%%~na-007-l.jpg -append ) ^
( Blues\%%~na-007-m.jpg Blues\%%~na-007-n.jpg -append ) ^
( Blues\%%~na-007-o.jpg Blues\%%~na-007-p.jpg -append ) ^
-background grey +append Done\%%~na.jpg
The command does use %%a. %%~na expands to the "name" of file %%a, the part after the drive and directory, before the dot-extension.
FlyingJenny2bucks wrote:For some reason, thats not working for me. Do I need a version update?
You might provide some clues. Do you get an error message? Is an image created? What does it look like? Have you tried "-debug all" to see (near the top of the output) exactly what arguments the shell passes to convert?
What does "dir *.jpg" show? Do you have corresponding files, with suffixes "-007-a" etc in directory "Blues\"?
Re: batch append not working - DOS
Posted: 2015-06-22T21:33:40-07:00
by FlyingJenny2bucks
Thanks. Where should I put "-debug all" in the script?
I removed "AND "Blues\%%~na-007-a.jpg" LEQ %Filessize%" and the script (without the parenthesis) is now working. I have checked the files in both directories and they are all named and displayed correctly in dos. I think its the parenthesis but I got around it now.
If I want to use conditions mentioned above, is shell script the best way? I have cygwin installed but avoided using shell scripts thus far because I find the synthax and wildcards too complicated (e.g. you can't simply attach suffixes to a file as easily as in dos) for my level.
Re: batch append not working - DOS
Posted: 2015-06-22T22:28:15-07:00
by snibgo
Change
to
You are using a shell script. Your shell is Windows CMD (also known as DOS). With Cygwin, you also have a shell called bash. You probably have many others from both Windows and Cygwin.
With Cygwin, you also have a massive range of tools (like "stat") available from either Windows CMD or bash.
Bash is certainly far more powerful than CMD, but I hate it. If it had been available on personal computers 30 years ago, perhaps I would love it.
If you have a command:
Code: Select all
if "Blues\%%~na-007-a.jpg" LEQ %Filessize% (
{blah}
)
then you are actually comparing two strings. The first two characters of each string are "B and 10. The first string is always less than the second.
The following CMD command, in a BAT file, will set BYTES to the number of bytes in the file x.jpg.
Code: Select all
for /F "usebackq" %%B in (`stat --printf=%%s x.jpg`) do set BYTES=%%B
Re: batch append not working - DOS
Posted: 2015-06-23T00:37:42-07:00
by FlyingJenny2bucks
Thank you for the clarifications.
for /F "usebackq" %%B in (`stat --printf=%%s x.jpg`) do set BYTES=%%B
I am uncertain as to what this does. How is it different to below ?
If I use %%a and %%b at the same time, how would I know they both correspond to the same file at the same time?
Re: batch append not working - DOS
Posted: 2015-06-23T04:42:21-07:00
by snibgo
Set Bytes=%%~za
Ah, yes, I'd forgotten that. Thanks.
If I use %%a and %%b at the same time, how would I know they both correspond to the same file at the same time?
They wouldn't. %%a and %%b are independent variables.
Re: batch append not working - DOS
Posted: 2015-06-23T20:26:20-07:00
by FlyingJenny2bucks
Great but my code below still isn't working. What have I done wrong?
Two conditions:
- %%~na-007-a.jpg exists
- %%~na-007-a.jpg file size is less/equal to 1mb
Code: Select all
Set FILESIZE=1000000
Set ZERO=Blues\%%~na-007-a.jpg
Set BYTE=%%~zZERO%
For %%a in (*.jpg) do (
IF EXIST Blues\%%~na-007-a.jpg GOTO APPEND1
)
:APPEND1
IF %BYTE% LEQ %FILESIZE% (
convert Blues\%%~na-007-a.jpg Blues\%%~na-007-b.jpg Blues\%%~na-007-c.jpg Blues\%%~na-007-d.jpg -background grey +append Done\%%~na.jpg
) ELSE (
convert Blues\%%~na-007-a.jpg Blues\%%~na-007-b.jpg Blues\%%~na-007-c.jpg Blues\%%~na-007-d.jpg -background grey -append Done\%%~na.jpg
)
Re: batch append not working - DOS
Posted: 2015-06-24T05:01:59-07:00
by snibgo
After setting BYTE, do an "echo %BYTE%". I think you will find it didn't work.
You could do it like this:
Code: Select all
for %%f in (%ZERO%) do set BYTE=%%~zf
echo %BYTE%
Re: batch append not working - DOS
Posted: 2015-06-24T21:55:26-07:00
by FlyingJenny2bucks
Sign..I'm getting this error "...1000000 is unexpected at this time".
Code: Select all
Set FILESIZE=1000000
For %%a in (*.jpg) do (
Set ZERO=Blues\%%~na-007-a.jpg
IF EXIST %ZERO% GOTO APPEND1
:APPEND1
for %%f in (%ZERO%) do set BYTE=%%~zf
IF %BYTE% LEQ %FILESIZE% (
convert Blues\%%~na-007-a.jpg Blues\%%~na-007-b.jpg Blues\%%~na-007-c.jpg Blues\%%~na-007-d.jpg -background grey +append Done\%%~na.jpg
) ELSE (
convert Blues\%%~na-007-a.jpg Blues\%%~na-007-b.jpg Blues\%%~na-007-c.jpg Blues\%%~na-007-d.jpg -background grey -append Done\%%~na.jpg
)
)