简体   繁体   English

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

[英]Windows command batch file calling variable from string in nested loop

I am trying to achieve this command in a batch file loop我正在尝试在批处理文件循环中实现此命令

md Documents
md Spreadsheets
md Medias
md Applications
md Archives
md Scripts
md Database
md Projects
md Tutorials

Cleaning Up documents清理文件

move *.pdf  Documents
move *.doc* Documents
move *.ppt* Documents
move *.txt Documents
move *.draw* Documents
move *.msg* Documents

Cleaning Up Spreadsheets清理电子表格

move *.csv Spreadsheets
move *.xls* Spreadsheets
move *.xml* Spreadsheets

Cleaning Up Medias清理媒体

move *.psd Medias
move *.png Medias
move *.jp* Medias
move *.gif Medias
move *.tiff Medias
move *.mp* Medias
move *.avi Medias

Cleaning Up Applications清理应用程序

move *.exe Applications
move *.msi Applications
move *.iso Applications
move *.vsix Applications

Cleaning Up Archives清理档案

move *.zip Archives
move *.rar Archives
move *.7z Archives
move *.tar Archives

Cleaning Up Scripts清理脚本

move *.cs Scripts
move *.js Scripts
move *.css Scripts

Cleaning Up Database files清理数据库文件

move *.sql Database
move *.bak Database
move *.accdb Database

Trying to achieve same this as above using FOR loop and get extensions from inner loop from SET variables like Documents Spreadsheets etc.尝试使用 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

Loop环形

FOR %%f IN (%Folders%) DO 
(
    ECHO %%f
    FOR %%e IN (%%%%f%%) DO (
        ECHO    %%e %%f 
    )
)

TIMEOUT /t 10
CLS

The output from the loop goes like this循环中的 output 如下所示

Documents
    %Documents% Documents 
Spreadsheets
    %Spreadsheets% Spreadsheets
Medias
    %Medias% Medias
Applications
    %Applications% Applications
Archives
    %Archives% Archives 
Scripts
    %Scripts% Scripts
Database
    %Database% Database

You are quite close, but writing an explicit percent sign doesn't pay the bill.您非常接近,但写一个明确的百分号并不能支付账单。 Use delayed expansion instead:改用延迟扩展

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM