Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

82 lines
1.9 KiB

@echo off
rem Enabling verbose or _echo in this script will cause
rem errors in the calling script.
setlocal enableextensions
REM Create a unique file name based on the full path file name
REM passed in.
for %%a in (./ .- .) do if ".%1." == "%%a?." goto usage
if "%1"=="" echo No input file specified & goto end
set infile=%1
for %%i in (%infile%) do (
set fullpath=%%~fi
set drvonly=%%~di
set pathonly=%%~pi
set baseonly=%%~ni
set extonly=%%~xi
)
REM
REM If the filename passed in does not already exist, return that name
REM
if not exist %fullpath% (
echo %fullpath%
goto end
)
REM
REM Otherwise, derive a filename based on the one passed in that doesn't
REM already exist.
REM IN: filename.ext
REM OUT: filename.1.ext
REM
set i=
:loop
set /a i+=1
set newname=%drvonly%%pathonly%%baseonly%.%i%%extonly%
if exist %newname% goto :loop
echo %newname%
REM
REM Create %newname%'s directory if it doesn't exist
REM
if not exist %drvonly%%pathonly% md %drvonly%%pathonly%
goto end
:usage
echo Returns a unique nonexistent full path file name based on the name passed in.
echo.
echo Usage: %~n0 ^<filename^>
echo.
echo ex: %~n0 filename.ext
echo -^> ^<cwd^>\filename.ext ^|
echo -^> ^<cwd^>\filename.1.ext ^| ...
echo -^> ^<cwd^>\filename.2.ext ^| ...
echo.
echo ex: %~n0 %%tmp%%\mylogfile.log
echo -^> c:\tmp\mylogfile.log ^|
echo -^> c:\tmp\mylogfile.1.log ^| ...
echo.
REM DOUBLE UP '%' IN THE FOLLOWING CMD EXAMPLE TO GET CORRECT OUTPUT
echo Typical call sequence from a CMD script:
echo set script_name=%%~n0
echo ...
echo for /f %%%%i in ('%~n0 %%tmp%%\%%script_name%%.log') do set logfile=%%%%i
echo call logmsg.cmd /t "Start %%cmdline%%"
echo.
echo NOTE: We write to the file, so other %~n0 calls will see it. Otherwise,
echo multiple %~n0 calls will return the same unique file name.
echo.
:end
@if defined _echo echo on
@if defined verbose echo on
@endlocal