在Windows 10中,我需要在文件夹中的子文件夹名称上创建一个循环批处理,我做了以下操作,但问题是%%我没有用空格管理文件夹名称,它只采取第一部分:
@echo off
FOR /F %%I IN ('dir /b C:\Users\Thomas\Music') DO (
ECHO %%I)
如果文件夹" Music"包含文件夹"我的音乐",然后回显%%我将仅打印"我的"。
答案 0 :(得分:2)
FOR /F "delims=" %%I IN ('dir /b /ad C:\Users\Thomas\Music') DO (
...并使用"%%I"
您想要使用包含名称的空格(即引用构造的字符串) - 适用于批处理使用包含分隔符的字符串的原则,如 Space
/ad
选择目录名而不是文件名。
添加另一个开关,/s
将扫描整个子目录树。
最好使用
将字符串值分配给变量set "var=%variablefrom%"
或者在元变量的情况下(例如代码中的循环控制变量%%I
)
set "var=%%I"
但是,如果要在循环中使用已分配变量(delayed expansion
)的值,则应调查var
(此处有很多项)的主题。
答案 1 :(得分:0)
评论 .bat
脚本中显示的最佳实践概念:
@ECHO OFF
SETLOCAL EnableExtensions DisableDelayedExpansion
FOR /F "delims=" %%I IN ('dir /b /AD "%UserProfile%\Music" 2^>NUL') DO (
rem process a FOR-loop variable directly
ECHO For_variable "%%~I"
rem set a FOR-loop variable as an environment variable value
set "_myVar=%%~I" see tilde which would strip double quotes
rem process an environment variable INside a FOR-loop body
SETLOCAL EnableDelayedExpansion
echo Env_variable "!_myVar!"
ENDLOCAL
rem process an environment variable OUTside a FOR-loop body
call :ProcessMyVar
)
ENDLOCAL
goto :eof
:ProcessMyVar
rem process an environment variable OUTside a FOR-loop body
echo Env_var_Call "%_myVar%"
goto :eof
输出表示即使是cmd
的名称 - 有害字符(如百分比或感叹号等)也会得到正确处理:
==> tree "%UserProfile%\Music"
Folder PATH listing
Volume serial number is 0000005F F2DF:F89D
C:\USERS\USER\MUSIC
├───100% My Tunes!
└───My Songs!
==> D:\bat\SO\39697872.bat
For_variable "100% My Tunes!"
Env_variable "100% My Tunes!"
Env_var_Call "100% My Tunes!"
For_variable "My Songs!"
Env_variable "My Songs!"
Env_var_Call "My Songs!"
==>
资源(必读,不完整):
%I
,%~I
等特殊页面)Command Line arguments (Parameters) >
,&
等特殊页面)Redirection %%
加倍百分号,^
插入符号,双引号)Escape Characters, Delimiters and Quotes