【发布时间】:2026-01-04 12:10:01
【问题描述】:
所以,我正在尝试编写一个批处理脚本操作来处理将某些类型的文件扩展名(照片 = .jpg、.png 等)移动到它们各自的子目录。
我遇到的问题是,当我开始运行循环时,循环不会停止,并且我无法跟踪是否正在循环某些类型。
有没有办法在单个子程序中执行此操作?还是更好的方法?另外,如果您可以留下有用的链接,因为我真的很想更彻底地了解我在编码的内容。
我正在运行 Windows 8.1
:cleanup
set Fdocs=%CD%\1_docs
set Fphotos=%CD%\2_photos
set Fdesigns=%CD%\3_designs
set Freviews=%CD%\4_reviews
set Ffinal=%CD%\5_final
set $ext=
set action=Cleaning
:: Create a subroutine function loop : FOR , go through array file extentions and move to destination
:: FOR /F
:fMover
for %%a in (%1) do move "%CD%\*%%a" "%CD%\%2"
echo %%a
timeout 1 >nul
:: CLEAN :: documents
set $ext=.txt .doc .docx .xls .csv .ppt .pptx
call :fMover %$ext% %Fdocs%
cls
echo %action% project folder.
:: CLEAN :: images
set $ext=.jpg .png .tiff .raw .nef .crw .dng
:: for %%a in (%$ext%) do move "%CD%\*%%a" "%CD%\%Fphotos%"
call :fMover %$ext% %Fphotos%
cls
echo %action% project folder..
timeout 1 >nul
:: CLEAN :: designs
set $ext=.psd .psb
call :fMover %$ext% %Fdesigns%
::for %%a in (%$ext%) do move "%CD%\*%%a" "%CD%\%Fdesigns%\2_psd"
set $ext=.ai .svg .svgz .esp
call :fMover %$ext% %Fdesigns%
::for %%a in (%$ext%) do move "%CD%\*%%a" "%CD%\%Fdesigns%\1_ai"
set %ext=.indd .idml
call :fMover %$ext% %Fdesigns%
::for %%a in (%$ext%) do move "%CD%\*%%a" "%CD%\%Fdesigns%\3_indd"
cls
echo %action% project folder...
timeout 1 >nul
cls
echo done.
timeout 2 >nul
【问题讨论】:
-
:: CLEAN :: designs部分有错字:set %ext=.indd .idml。在回答中进行了更正。
标签: batch-file command-line window windows-8.1