%%windows批处理中的I不';不能用空格管理名称
在windows 10中,我需要在文件夹中的子文件夹名称上创建一个循环批处理,我执行了以下操作,但问题是%%I不使用空格管理文件夹名称,它只使用第一部分:%%windows批处理中的I不';不能用空格管理名称,windows,batch-file,Windows,Batch File,在windows 10中,我需要在文件夹中的子文件夹名称上创建一个循环批处理,我执行了以下操作,但问题是%%I不使用空格管理文件夹名称,它只使用第一部分: @echo off FOR /F %%I IN ('dir /b C:\Users\Thomas\Music') DO ( ECHO %%I) 如果文件夹“音乐”包含文件夹“我的音乐”,则echo%%我将仅打印“我的音乐” 。。。如果要使用包含空格的名称(即引用构造的字符串),请使用“%%I”——这一原则适用于批处理使用包含空格等分
@echo off
FOR /F %%I IN ('dir /b C:\Users\Thomas\Music') DO (
ECHO %%I)
如果文件夹“音乐”包含文件夹“我的音乐”,则echo%%我将仅打印“我的音乐”
。。。如果要使用包含空格的名称(即引用构造的字符串),请使用“%%I”
——这一原则适用于批处理使用包含空格等分隔符的字符串的情况
/ad
选择目录名而不是文件名
再添加一个开关,/s
将扫描整个子目录树
将字符串值赋值给变量最好使用
set "var=%variablefrom%"
或者对于元变量(例如代码中的循环控制变量%%I
),您需要
set "var=%%I"
但是,如果您想在循环中使用分配的变量(
var
)的值,您应该研究延迟扩展
(此处有许多项)的主题。我的最佳实践概念显示在注释的.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
- (专页)
- (
,
等特殊页面)&
- (
双倍百分号,%%
插入符号,双引号)^
对于/F“delims=“%%I IN('dir/b/AD C:\Users\Thomas\Music'),请阅读(
感谢您的回答!之后如何处理%%I?我尝试将其放入带有“set my_var=%%I”的变量中但这不起作用……正如Magoo在下一篇评论中所说的那个样,它对延迟的扩展起作用。谢谢,谢谢,它似乎非常适合我的需要,我去试试
==> 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!"
==>