Discussion forum for all Windows batch related topics.
Moderator: DosItHelp
-
donnell5000
- Posts: 3
- Joined: 31 May 2019 10:47
#1
Post
by donnell5000 » 31 May 2019 11:18
Can someone please tell me why the following code runs differently when executed as a batch file vs line by line (or pasted in a "Command Prompt" window)
The code simply outputs a hex dump of the file specified on the second line. The only difference between the two code blocks is that '%%' has been replaced with '%' to run outside of a batch file.
What do I need to change in the "line by line" version in order to get the correct results produced by the batch file version.
Thank you.
BATCH FILE
Code: Select all
@echo off &setlocal
set "infile=gear.png"
cd /d "%~dp0"
if not exist "%infile%" goto :eof
set "tmpf=%temp%\#.tmp~"
del "%tmpf%" 2>nul
for %%i in ("%infile%") do (
set /a size=%%~zi || goto :eof
fsutil file createnew "%tmpf%" %%~zi >nul || goto :eof
)
setlocal EnableDelayedExpansion
set /a x=1
for /f "skip=1 tokens=1,2 delims=: " %%i in ('fc /b "%infile%" "%tmpf%"') do (
set /a y=0x%%i
for /l %%k in (!x! 1 !y!) do <nul set /p "=00 "
<nul set /p "=%%j "
set /a x=y+2
)
for /l %%i in (!x! 1 !size!) do <nul set /p "=00 "
del "%tmpf%"
LINE BY LINE
Code: Select all
@echo off &setlocal
set "infile=gear.png"
cd /d "%~dp0"
if not exist "%infile%" goto :eof
set "tmpf=%temp%\#.tmp~"
del "%tmpf%" 2>nul
for %i in ("%infile%") do (
set /a size=%~zi || goto :eof
fsutil file createnew "%tmpf%" %~zi >nul || goto :eof
)
setlocal EnableDelayedExpansion
set /a x=1
for /f "skip=1 tokens=1,2 delims=: " %i in ('fc /b "%infile%" "%tmpf%"') do (
set /a y=0x%i
for /l %k in (!x! 1 !y!) do <nul set /p "=00 "
<nul set /p "=%j "
set /a x=y+2
)
for /l %i in (!x! 1 !size!) do <nul set /p "=00 "
del "%tmpf%"
-
aGerman
- Expert
- Posts: 4678
- Joined: 22 Jan 2010 18:01
- Location: Germany
#2
Post
by aGerman » 02 Jun 2019 13:45
Consider to call the batch script from the command prompt instead. There are lines in the script that can't be written as command lines.
Steffen
-
donnell5000
- Posts: 3
- Joined: 31 May 2019 10:47
#3
Post
by donnell5000 » 02 Jun 2019 14:49
I always thought that batch files ran the same way whether typed in line-by-line or from a batch file.
Thank you for confirming this is not always true.
-
dbenham
- Expert
- Posts: 2461
- Joined: 12 Feb 2011 21:02
- Location: United States (east coast)
#4
Post
by dbenham » 02 Jun 2019 15:56
Major differences, off the top of my head:
- SETLOCAL / ENDLOCAL has no effect on the command line
- GOTO has no effect on the command line
- CALL :label always fails on the command line
- If VAR is undefined, then %VAR% and !VAR! expands to empty string in batch, but no change (%VAR% !VAR! remain) on the command line
Dave Benham
-
donnell5000
- Posts: 3
- Joined: 31 May 2019 10:47
#5
Post
by donnell5000 » 02 Jun 2019 16:53
I was falsely reassured that multiple statements entered from the command line would work as a batch file when I was prompted with "More?" while typing the body of the "for /f" statement.
I was only looking for a way to do a hex dump of any file (XP thru Win10) without having my process write a batch file to the file system.
Would be nice if there was a BEGIN_BATCH and END_BATCH command for statements entered manually
-
ShadowThief
- Expert
- Posts: 1166
- Joined: 06 Sep 2013 21:28
- Location: Virginia, United States
#6
Post
by ShadowThief » 04 Jun 2019 11:36
donnell5000 wrote: ↑02 Jun 2019 16:53
I was falsely reassured that multiple statements entered from the command line would work as a batch file when I was prompted with "More?" while typing the body of the "for /f" statement.
I was only looking for a way to do a hex dump of any file (XP thru Win10) without having my process write a batch file to the file system.
Would be nice if there was a BEGIN_BATCH and END_BATCH command for statements entered manually
Code: Select all
certutil -encodehex input_file output_file
As long as the files aren't too big, this will work. Otherwise, find a hex editor that has a command line interface and download it.
-
Aacini
- Expert
- Posts: 1910
- Joined: 06 Dec 2011 22:15
- Location: México City, México
-
Contact:
#7
Post
by Aacini » 05 Jun 2019 08:54
At
this topic there is a detailed description of the differences of execute commands inside a Batch.bat file vs directly at the command line. Perhaps you may want to review it, but be warned that such a topic quickly changes into an esoteric subject!
Antonio