Windows命令批处理文件从嵌套循环中的字符串调用变量



我正在尝试在批处理文件循环中实现此命令

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" 
)
)

最新更新