The idea is simple pass this script some arguments to create another batch script containing all set commands, then the idea is when writing a script the outputted file could be used as a call to setting the variables and paths, so %cmd.exe% outputted would equal C:\WINDOWS\system32 etc...
Code:
@echo off
setlocal
::
::
REM This script uses variations of the dir command to create a batch script
REM Which will set the file names and / or both directory names as a variable
REM And the path as its value
REM Ultimately the goal is for the outputed batch file containing the variables
REM To be used as a call to batch from another batch inorder to set files and
REM Directories to there path which is the value
REM So %cmd.exe% outputed would equal C:\WINDOWS\system32
:NOTE:
REM That if directory names contain a . they will be interpreted as a file
REM Rather than a directory name
::
::
:Check_ARGS_If_Not_Exist_Goto_USAGE
if [%~1]==[] goto :USAGE
:Set_Output_File_Name
set OutputFile=%~1
:Create_Batch_Header
echo.@echo off>>%OutputFile%
echo.>>%OutputFile%
:Pass_Command_Line_Switches_And_Arguments
shift
if /i "%~1"=="-sdd" shift&&goto :SINGLE-Directory_Include_Directory_Names_Only
if /i "%~1"=="-sdf" shift&&goto :SINGLE-Directory_Include_File_Names_Only
if /i "%~1"=="-ssf" shift&&goto :SINGLE-Directory_Include_Specific_File_Names_Only
if /i "%~1"=="-sfd" shift&&goto :SINGLE-Directory_Include_File_And_Directory_Names
if /i "%~1"=="-asd" shift&&goto :ALL-Sub_Directories_Include_Directory_Names_Only
if /i "%~1"=="-asf" shift&&goto :ALL-Sub_Directories_Include_File_Names_Only
if /i "%~1"=="-ads" shift&&goto :ALL-Sub_Directories_Include_Specific_File_Names_Only
if /i "%~1"=="-adf" shift&&goto :ALL-Sub_Directories_Include_File_And_Directory_Names
goto :ERROR01
:SINGLE-Directory_Include_Directory_Names_Only
for /f "tokens=*" %%A in ('dir /a:d /b "%~1"') do (
echo.set %%~nxA=%~1>>%OutputFile%
)
goto :EOF
:SINGLE-Directory_Include_File_Names_Only
for /f "tokens=*" %%A in ('"dir /b "%~1" | Find ".""') do (
echo.set %%~nxA=%~1>>%OutputFile%
)
goto :EOF
:SINGLE-Directory_Include_Specific_File_Names_Only
for /f "tokens=*" %%A in ('"dir /b "%~1" | Find /i "%~2""') do (
echo.set %%~nxA=%~1>>%OutputFile%
)
goto :EOF
:SINGLE-Directory_Include_File_And_Directory_Names
for /f "tokens=*" %%A in ('dir /b "%~1"') do (
echo.set %%~nxA=%~1>>%OutputFile%
)
goto :EOF
:ALL-Sub_Directories_Include_Directory_Names_Only
for /f "tokens=*" %%A in ('dir /a:d /b /s "%~1"') do (
echo.set %%~nxA=%~1>>%OutputFile%
)
goto :EOF
:ALL-Sub_Directories_Include_File_Names_Only
for /f "tokens=*" %%A in ('"dir /b /s "%~1" | Find ".""') do (
echo.set %%~nxA=%~1>>%OutputFile%
)
goto :EOF
:ALL-Sub_Directories_Include_Specific_File_Names_Only
for /f "tokens=*" %%A in ('"dir /b /s "%~1" | Find /i "%~2""') do (
echo.set %%~nxA=%~1>>%OutputFile%
)
goto :EOF
:ALL-Sub_Directories_Include_File_And_Directory_Names
for /f "tokens=*" %%A in ('dir /b /s "%~1"') do (
echo.set %%~nxA=%~1>>%OutputFile%
)
goto :EOF
:USAGE
echo.Usage: %0 [(Output File) (Switch) (Directory) (File Extensions)]
echo.
echo.Switches:
echo.
echo.-sdd (Would Process Directory and Only Directories)
echo.-sdf (Would Process Directory and Only Files)
echo.-ssf (Would Process Directory and Only Specific Files)
echo.-sfd (Would Process Directory Include Directories and Files)
echo.-asd (Would Process Sub Directories and Only Directories)
echo.-asf (Would Process Sub Directories and Only Files)
echo.-ads (Would Process Sub Directories and Specific Files)
echo.-adf (Would Process Sub Directories Include Directories and Files)
echo.
echo.Examples:
echo.
echo.%0 "My Output File.bat" -sdd "C:\WINDOWS"
echo.%0 "My Output File.bat" -sdf "C:\WINDOWS"
echo.%0 "My Output File.bat" -ssf "C:\WINDOWS" ".exe"
echo.%0 "My Output File.bat" -sfd "C:\WINDOWS"
echo.%0 "My Output File.bat" -asd "C:\WINDOWS"
echo.%0 "My Output File.bat" -asf "C:\WINDOWS"
echo.%0 "My Output File.bat" -ads "C:\WINDOWS" ".dll"
echo.%0 "My Output File.bat" -adf "C:\WINDOWS"
goto :EOF
:ERROR01
echo.ERROR!!!
echo.
echo.Either an improper switch was used or
echo.No switch at all was provided
echo.Type %0 from the command line to
echo.Retrieve usage info
goto :EOF
