I need to add some index on each ".sh" file. I try to make a bat file but not work.
Anyone can help to fix it? Thanks
@echo off
setlocal enabledelayedexpansion
for /F %i IN ('dir /b/a-d/s *.sh') do (
set FileName=%~ni.sh
set DataFileName=%FileName%
Set LocationDir=Pong\
//index information//@echo ######################################################################### >>d:\%LocationDir%%DataFileName%
@echo # File Name: >>d:\%LocationDir%%DataFileName%
@echo # Calling sql: >>d:\%LocationDir%%DataFileName%
@echo # Type (update/query): >>d:\%LocationDir%%DataFileName%
@echo # Responsible Team: >>d:\%LocationDir%%DataFileName%
@echo # Last updated by: >>d:\%LocationDir%%DataFileName%
@echo # Last updated on (dd-mm-yyyy): >>d:\%LocationDir%%DataFileName%
@echo # Description: >>d:\%LocationDir%%DataFileName%
@echo ######################################################################### >>d:\%LocationDir%%DataFileName%
@echo. >>d:\%LocationDir%%DataFileName%
@echo. >>d:\%LocationDir%%DataFileName%
for /f "tokens=*" %%k in ('type %DataFileName%') do (
set line=%%k
echo !line! >>d:\%LocationDir%%DataFileName%
)
)
Not work as add index on each ".sh" file
Moderator: DosItHelp
Re: Not work as add index on each ".sh" file
Hello wingcity,
first, it would be helpful to say which part doesn't work.
We can't help if you don't tell if the result isn't the one you expect or it fails with an error in line xyz or ...
Also it's a good idea to use the CODE button, above the textbox to format your code.
As you enable the delayed expansion, you should use it in your FOR-block, else your DataFileName expansion will not work.
Btw. It's not clear what you are trying to do with the second FOR/F loop.
first, it would be helpful to say which part doesn't work.
We can't help if you don't tell if the result isn't the one you expect or it fails with an error in line xyz or ...
Also it's a good idea to use the CODE button, above the textbox to format your code.
Code: Select all
@echo off
setlocal enabledelayedexpansion
set LocationDir=D:\Pong\
for /F %i IN ('dir /b/a-d/s *.sh') do (
set FileName=%~ni.sh
set DataFileName=!FileName!
(
rem //index information//@echo #########################################################################
echo # File Name:
echo # Calling sql:
echo # Type (update/query):
echo # Responsible Team:
echo # Last updated by:
echo # Last updated on (dd-mm-yyyy):
echo # Description:
echo #########################################################################
echo.
echo.
) > !LocationDir!!DataFileName!
rem for /f "tokens=*" %%k in ('type !DataFileName!') do (
rem set line=%%k
rem echo !line! >>!LocationDir!!DataFileName!
rem )
)
As you enable the delayed expansion, you should use it in your FOR-block, else your DataFileName expansion will not work.
Btw. It's not clear what you are trying to do with the second FOR/F loop.
Re: Not work as add index on each ".sh" file
The () need to be escaped in the echo-to-file function. Just the ) but I do both so it's obvious what is being done.
Code: Select all
@echo off
setlocal enabledelayedexpansion
set LocationDir=D:\Pong\
for /F %i IN ('dir /b/a-d/s *.sh') do (
set FileName=%~ni.sh
set DataFileName=!FileName!
(
rem //index information//@echo #########################################################################
echo # File Name:
echo # Calling sql:
echo # Type ^(update/query^):
echo # Responsible Team:
echo # Last updated by:
echo # Last updated on ^(dd-mm-yyyy^):
echo # Description:
echo #########################################################################
echo.
echo.
) > !LocationDir!!DataFileName!
rem for /f "tokens=*" %%k in ('type !DataFileName!') do (
rem set line=%%k
rem echo !line! >>!LocationDir!!DataFileName!
rem )
)
Re: Not work as add index on each ".sh" file
Dear All,
I fixed with following. Thanks All.
@echo off
for /F %%i IN ('dir /b/a-d/s *.sh') do (
set "FileName=%%~ni.sh"
call :proc %%i
call :proc2 %%i
)
goto :eof
:proc
Set LocationDir=Pong\
set DataFileName=%FileName%
setlocal enabledelayedexpansion
@echo ############################################################>>d:\%LocationDir%!DataFileName!
@echo # File Name: %FileName% >>d:\%LocationDir%!DataFileName!
@echo # Calling sql: >>d:\%LocationDir%!DataFileName!
@echo # Type (update/query): >>d:\%LocationDir%!DataFileName!
@echo # Responsible Team: >>d:\%LocationDir%!DataFileName!
@echo # Last updated by: >>d:\%LocationDir%!DataFileName!
@echo # Last updated on (dd-mm-yyyy): >>d:\%LocationDir%!DataFileName!
@echo # Description: >>d:\%LocationDir%!DataFileName!
@echo ############################################################ >>d:\%LocationDir%!DataFileName!
@echo. >>d:\%LocationDir%!DataFileName!
@echo. >>d:\%LocationDir%!DataFileName!
endlocal
goto :eof
:proc2
Set LocationDir=Pong\
set DataFileName=%FileName%
setlocal enabledelayedexpansion
for /f "tokens=*" %%k in ('type !DataFileName!') do (
set line=%%k
echo !line! >>d:\%LocationDir%!DataFileName!
)
endlocal
goto :eof
I fixed with following. Thanks All.
@echo off
for /F %%i IN ('dir /b/a-d/s *.sh') do (
set "FileName=%%~ni.sh"
call :proc %%i
call :proc2 %%i
)
goto :eof
:proc
Set LocationDir=Pong\
set DataFileName=%FileName%
setlocal enabledelayedexpansion
@echo ############################################################>>d:\%LocationDir%!DataFileName!
@echo # File Name: %FileName% >>d:\%LocationDir%!DataFileName!
@echo # Calling sql: >>d:\%LocationDir%!DataFileName!
@echo # Type (update/query): >>d:\%LocationDir%!DataFileName!
@echo # Responsible Team: >>d:\%LocationDir%!DataFileName!
@echo # Last updated by: >>d:\%LocationDir%!DataFileName!
@echo # Last updated on (dd-mm-yyyy): >>d:\%LocationDir%!DataFileName!
@echo # Description: >>d:\%LocationDir%!DataFileName!
@echo ############################################################ >>d:\%LocationDir%!DataFileName!
@echo. >>d:\%LocationDir%!DataFileName!
@echo. >>d:\%LocationDir%!DataFileName!
endlocal
goto :eof
:proc2
Set LocationDir=Pong\
set DataFileName=%FileName%
setlocal enabledelayedexpansion
for /f "tokens=*" %%k in ('type !DataFileName!') do (
set line=%%k
echo !line! >>d:\%LocationDir%!DataFileName!
)
endlocal
goto :eof
Re: Not work as add index on each ".sh" file
I think this is functionally equivalent and handles long filenames, and any blank lines in the .sh files.
Code: Select all
@echo off
set "folder=d:\pong"
for /F "delims=" %%a in ('dir /b/a-d/s *.sh') do (
>"%folder%\%%~nxa" echo ############################################################
>>"%folder%\%%~nxa" echo # File Name: %%~nxa
>>"%folder%\%%~nxa" echo # Calling sql:
>>"%folder%\%%~nxa" echo # Type (update/query):
>>"%folder%\%%~nxa" echo # Responsible Team:
>>"%folder%\%%~nxa" echo # Last updated by:
>>"%folder%\%%~nxa" echo # Last updated on (dd-mm-yyyy):
>>"%folder%\%%~nxa" echo # Description:
>>"%folder%\%%~nxa" echo ############################################################
>>"%folder%\%%~nxa" echo.
>>"%folder%\%%~nxa" echo.
type "%%a" >>"%folder%\%%~nxa"
)