我正在尝试在批处理文件循环中实现此命令
md Documents
md Spreadsheets
md Medias
md Applications
md Archives
md Scripts
md Database
md Projects
md Tutorials
清理文档
move *.pdf Documents
move *.doc* Documents
move *.ppt* Documents
move *.txt Documents
move *.draw* Documents
move *.msg* Documents
清理电子表格
move *.csv Spreadsheets
move *.xls* Spreadsheets
move *.xml* Spreadsheets
清理媒体
move *.psd Medias
move *.png Medias
move *.jp* Medias
move *.gif Medias
move *.tiff Medias
move *.mp* Medias
move *.avi Medias
清理应用程序
move *.exe Applications
move *.msi Applications
move *.iso Applications
move *.vsix Applications
清理档案
move *.zip Archives
move *.rar Archives
move *.7z Archives
move *.tar Archives
清理脚本
move *.cs Scripts
move *.js Scripts
move *.css Scripts
清理数据库文件
move *.sql Database
move *.bak Database
move *.accdb Database
尝试使用FOR循环实现与上述相同的功能,并从SET变量(如文档、电子表格等)的内部循环中获得扩展。
Varirables
SETLOCAL
SET Folders=Documents Spreadsheets Medias Applications Archives Scripts Database
SET Documents=*.pdf *.doc* *.ppt* *.txt *.draw* *.msg*
SET Spreadsheets=*.csv *.xls *.xml
SET Medias=*.psd *.png *.jp* *.gif *.tif *.mp* *.avi *.mov
SET Applications=*.exe *.msi *.vsix *.iso
SET Archives=*.zip *.rar *.7z *.tar
SET Scripts=*.cs *.js *.css
SET Database=*.sql *.bak *.accdb
循环
FOR %%f IN (%Folders%) DO
(
ECHO %%f
FOR %%e IN (%%%%f%%) DO (
ECHO %%e %%f
)
)
TIMEOUT /t 10
CLS
循环的输出如下所示
Documents
%Documents% Documents
Spreadsheets
%Spreadsheets% Spreadsheets
Medias
%Medias% Medias
Applications
%Applications% Applications
Archives
%Archives% Archives
Scripts
%Scripts% Scripts
Database
%Database% Database
你很接近了,但是写一个明确的百分号并不能说明问题。使用延迟展开代替:
@echo off
setlocal enabledelayedexpansion
SET Folders=Documents Spreadsheets Medias Applications Archives Scripts Database
SET Documents=*.pdf *.doc* *.ppt* *.txt *.draw* *.msg*
SET Spreadsheets=*.csv *.xls *.xml
SET Medias=*.psd *.png *.jp* *.gif *.tif *.mp* *.avi *.mov
SET Applications=*.exe *.msi *.vsix *.iso
SET Archives=*.zip *.rar *.7z *.tar
SET Scripts=*.cs *.js *.css
SET Database=*.sql *.bak *.accdb
FOR %%f IN (%Folders%) DO (
ECHO cleaning up %%f
FOR %%e IN (!%%f!) DO (
ECHO move "%%e" "%%f"
)
)