一直试图计算如何将随机字符串生成作为函数,然后调用函数为每个for循环返回新的随机数。
但无法使其正常工作......
空白的想法,批量编程似乎比网络复杂得多..
@echo off
GOTO :MAIN
:TestFunc
set orig=%1
set %~2=%random%
goto :eof
:MAIN
for %%a in (C:\folder\*.png) do (
set /a count+=1
set "fname=%%~a"
setlocal enabledelayedexpansion
set param_to_function=LetItBeA
call :TestFunc %param_to_function% return_value
set random=%return_value%
echo !random!
echo !fname!
ren "!fname!" img_%date:~10,4%-%date:~4,2%-%date:~7,2%_%HR%%time:~3,2%-!random!.png
endlocal
)
goto :eof
答案 0 :(得分:3)
回答原始问题(编辑前)。说明:
for /F
使用dir /b
与for /F
不同,for
会立即开始解析文件,以便一次又一次地重命名文件...... ren
之前。endlocal&set "%1=%_RndAlphaNum%"&goto :eof
棘手的部分如何将值返回给通过引用传递的变量(参数)。ren
命令echo
仅用于调试目的。资源(必读):
剧本:
@ECHO OFF
SETLOCAL enableextensions disabledelayedexpansion
Set /A "_RNDLength=6"
Set "_Alphanumeric=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
set "_folder=C:\folder"
for /F "delims=" %%a in ('dir /B "%_folder%\*.png"') do (
set /a count+=1
set "fname=%%~nxa"
call :renameFile
)
ENDLOCAL
goto :eof
:renameFile
call :getRandomString _RndANum
set "newFileName=img_%date:~10,4%-%date:~4,2%-%date:~7,2%_%HR%%time:~3,2%-%_RndANum%.png"
if exist "%_folder%\%newFileName%" goto :renameFile
echo ren "%_folder%\%fname%" "%newFileName%"
goto :eof
:getRandomString
rem usage
rem call :getRandomString varname
rem %1 = a variable name (pass by reference)
Setlocal EnableDelayedExpansion
Set "_Str=%_Alphanumeric%987654321"
:_LenLoop
IF NOT "%_Str:~18%"=="" (
SET _Str=%_Str:~9%
SET /A "_Len+=9"
GOTO :_LenLoop
)
SET _tmp=%_Str:~9,1%
SET /A _Len=_Len+_tmp
Set _count=0
SET _RndAlphaNum=
:_loop
Set /a _count+=1
SET _RND=%Random%
Set /A _RND=_RND%%%_Len%
SET _RndAlphaNum=!_RndAlphaNum!!_Alphanumeric:~%_RND%,1!
If !_count! lss %_RNDLength% goto _loop
rem do not split next line
endlocal&set "%1=%_RndAlphaNum%"&goto :eof