%%我在Windows批处理中没有用空格管理名称

时间:2016-09-26 08:22:27

标签: windows batch-file

在Windows 10中,我需要在文件夹中的子文件夹名称上创建一个循环批处理,我做了以下操作,但问题是%%我没有用空格管理文件夹名称,它只采取第一部分:

@echo off
FOR /F %%I IN ('dir /b C:\Users\Thomas\Music') DO (
    ECHO %%I)

如果文件夹" Music"包含文件夹"我的音乐",然后回显%%我将仅打印"我的"。

2 个答案:

答案 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!"

==>

资源(必读,不完整):