我有以下批次代码。问题是,当我运行批处理文件时,屏幕截图文件存储在正确的目录中,但批处理代码不会重命名文件。如果批处理文件位于同一目录中,则只能正确重命名。
@echo off
:strt
myprogram savescreenshot "A:\Some Folder\New folder\scr~$currtime.HH_mm_ss$.png"
setlocal disableDelayedExpansion
set "chars=abcdefghijklmnopqrstuvwxyz0123456789"
set mydir=A:\Folder\New folder
:: (tried this too) PATH=%PATH%;A:\Folder\New folder\*.png
for /f "eol=: delims=" %%F in ('dir /b /a-d "%mydir%\*.png"') do call :renameFile "%%F"
exit /b
:renameFile
setlocal enableDelayedExpansion
:retry
set "name="
for /l %%N in (1 1 32) do (
set /a I=!random!%%36
for %%I in (!I!) do set "name=!name!!chars:~%%I,1!"
)
if exist "!name!.png" goto :retry
endlocal & ren %1 {%name%}
::ping 192.0.2.0 -n 1 -w 10000 >nul
goto strt
我认为这与这一行有关:
for /f "eol=: delims=" %%F in ('dir /b /a-d "A:\Some folder\New\New folder\*.png"') do call :renameFile "%%F"
如果我将行更改为此
for /f "eol=: delims=" %%F in ('dir /b /a-d *.png') do call :renameFile "%%F"
它完美无缺。
答案 0 :(得分:0)
@echo off
:strt
myprogram savescreenshot "A:\Some Folder\New folder\scr~$currtime.HH_mm_ss$.png"
setlocal disableDelayedExpansion
set "chars=abcdefghijklmnopqrstuvwxyz0123456789"
set "mydir=A:\Folder\New folder"
pushd "%mydir%"
:: (tried this too) PATH=%PATH%;A:\Folder\New folder\*.png
for /f "delims=" %%F in ('dir /b /a-d "*.png"') do call :renameFile "%%F"
POPD
exit /b
:renameFile
setlocal enableDelayedExpansion
:retry
set "name="
for /l %%N in (1 1 32) do (
set /a I=!random!%%36
for %%I in (!I!) do set "name=!name!!chars:~%%I,1!"
)
if exist "!name!.png" goto :retry
endlocal & ren %1 {%name%}
::ping 192.0.2.0 -n 1 -w 10000 >nul
goto :eof
注意更改:
mydir
设置 - 添加引号以确保所分配的值中不包含尾随空格(一般原则)
pushd
/ popd
括号 - 将当前目录更改为mydir
并恢复原始
eol=:
已从for
中删除 - 不需要delims=
将整行分配到%%F
exit/b
可以由goto :eof
替换,效果相同
最终goto changed to
:eof . This terminates the subroutine
:and returns to the
strt loop. Going to
savedcreenshot`的renamefile means that the entire procedure is re-run, starting with
,可能会创建另一个文件并随机重命名,无限重复。
你还没有说明你的文件应该做什么。它似乎无休止地重新运行savescreenshot
,然后重命名它所找到的匹配*.png
的第一个文件。
如果您要将for ...%%F
中的文件掩码从*.png
更改为*-*.png
,则只会重命名尚未重命名的名称(savescreenshot
在目标目录中生成名称“scr~ $ currtime.HH_mm_ss $ .png”。这是一个普通的文字名称,除非savescreenshot
以某种方式处理它。所以文件“ scr~ $ currtime.HH_mm_ss $ .png“会在原始进程中一遍又一遍地创建和覆盖。” - .png“将仅针对最新创建的文件,因为它是唯一包含-
的内容 - 您的重命名例程会将其更改为包含-
的文件名不。