Re: Do you speak Batch?
Posted: Tue Nov 20, 2012 5:43 am
TPFC Forums
https://www.portablefreeware.com/forums/
https://www.portablefreeware.com/forums/viewtopic.php?t=14523
Code: Select all
ECHO.
ECHO USE: SWAP.BAT PARAM#1 PARAM#2 (USE TAB FOR AUTO COMPLETION IF AVAILABLE...)
ECHO.
ECHO REALLY SWAP "%1" NAME WITH "%2"?
ECHO.
ECHO (CTRL+C TO ABORT OR ANY KEY TO PROCEED...)
PAUSE
SETLOCAL
REM RECORD ORIGINAL FILESYSTEM OBJECTS NAMES
SET fsObjA=%1
SET fsObjB=%2
REM GENERATE A CLEAN DATE-TIME STRING IN "%%DTuniq%%"
FOR /f %%a IN ('WMIC OS GET LocalDateTime ^| FIND "."') DO SET DTuniq=%%a
SET DTuniq=%DTuniq:~0,8%-%DTuniq:~8,6%
REM DO THE NAME SWAP, CREATE LOG AND END
MOVE %1 %DTuniq% > nul
MOVE %2 %fsObjA% > nul
MOVE %DTuniq% %fsObjB% > nul
ECHO %DTuniq%: %fsObjA% name swapped with %fsObjB% > swap-%DTuniq%.log
ECHO.
ECHO DONE!
Code: Select all
ECHO.
ECHO USE: SWAP.BAT PARAM#1 PARAM#2 (USE TAB FOR AUTO COMPLETION IF AVAILABLE...)
ECHO.
ECHO REALLY SWAP "%1" NAME WITH "%2"?
ECHO.
ECHO (CTRL+C TO ABORT OR ANY KEY TO PROCEED...)
PAUSE
SETLOCAL
REM RECORD ORIGINAL FILESYSTEM OBJECTS NAMES
SET fsObjA=%1
SET fsObjB=%2
REM GENERATE A CLEAN TIME_STRING FOR "%%tsclean%%"
SET "tsclean=%time:~0,8%" &:: GET FIRST 8 CHARS
SET "tsclean=%tsclean::=%" &:: ERASE COLONS
IF "%tsclean:~0,1%" == " " DO SET "tsclean=0%tsclean:~1,7%" &:: ADD 0 IF SPACE AT BEGINNING
REM TEST SYSTEM SHORT DATEFORMAT (NOTE! 'DELIMS=[TAB][SPACE]')
REM FOR XP AND PRIOR, 'SKIP' VALUE SHOULD BE == '4'!
REM FOR VISTA AND AFTER, 'SKIP' VALUE SHOULD BE == '2'!
FOR /F "skip=2 tokens=2* delims= " %%A IN ('REG QUERY "HKCU\Control Panel\International" /V sShortDate') DO SET dform=%%B
REM FOLLOW DATEFORMAT TO GENERATE A UNIQUE STRING AT "%%tduniq%%"
IF "%dform:~0,4%" == "yyyy" DO GOTO ISO
IF "%dform:~0,5%" == "MM-dd" DO GOTO MUDDY
:DUMMY
REM BOTH CONDITIONS ABOVE ARE FALSE
SET "yyyymmdd=%date:~6,4%%date:~3,2%%date:~0,2%"
SET "tduniq=%yyyymmdd%%tsclean%"
GOTO PROCEED
:ISO
REM FIRST CONDITION ABOVE IS TRUE
SET "yyyymmdd=%date:-=%"
SET "tduniq=%yyyymmdd%%tsclean%"
GOTO PROCEED
:MUDDY
REM SECOND CONDITION ABOVE IS TRUE
SET "yyyymmdd=%date:~6,4%%date:~0,2%%date:~3,2%"
SET "tduniq=%yyyymmdd%%tsclean%"
:PROCEED
MOVE %1 %tduniq% > nul
MOVE %2 %fsObjA% > nul
MOVE %tduniq% %fsObjB% > nul
ECHO %yyyymmdd%_%tsclean%: %fsObjA% name swapped with %fsObjB% > swap-%tduniq%.log
ECHO.
ECHO DONE!
ENDLOCAL