Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
%%windows批处理中的I不';不能用空格管理名称_Windows_Batch File - Fatal编程技术网

%%windows批处理中的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”——这一原则适用于批处理使用包含空格等分

在windows 10中,我需要在文件夹中的子文件夹名称上创建一个循环批处理,我执行了以下操作,但问题是%%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!"

==>