Batch file 虽然指定了delims,但在传递带有空格的filename变量时,循环的批处理文件不起作用
这是我第一次使用批处理文件,如果这是我刚刚错过的简单内容,那么很抱歉 我有一个批处理文件,需要向其传递文件路径/名称。此路径有空格。据我所知,为了传递它,我需要在它周围加上引号。一旦我在批处理文件中得到它,然后我需要通过for循环运行它,但是它总是给我一个错误,在空格处分割文件路径。我正在循环中使用“delims=”。以下是我尝试过的一些事情,但都没有成功: 只需将参数传入循环(echo%1以引号括起文件路径) 原因:“Suite”未被识别为内部或外部命令(Suite是第一个空格后的单词) 传递由引号括起的参数(回显“%1”生成由两个引号括起的文件路径) 原因:系统找不到文件“G:\Programming\App”(第一个空格之前的内容) 去掉引号并以引号传递变量(echo“%fn%”再次以引号生成文件路径) 原因:“Suite”未被识别为内部或外部命令 去掉引号并传入不带引号的变量(echo%fn%生成不带引号的完整文件路径) 原因:系统找不到文件套件 如果我只是在引号中键入一个文件路径,那么stuff部分就可以工作,所以我认为这部分不会引起问题。我认为问题在它到达之前就已经发生了 我做错了什么 编辑 另一个批处理文件正在调用该批处理文件,该批处理文件嵌入了一个循环通过该路径中的文件的路径:Batch file 虽然指定了delims,但在传递带有空格的filename变量时,循环的批处理文件不起作用,batch-file,Batch File,这是我第一次使用批处理文件,如果这是我刚刚错过的简单内容,那么很抱歉 我有一个批处理文件,需要向其传递文件路径/名称。此路径有空格。据我所知,为了传递它,我需要在它周围加上引号。一旦我在批处理文件中得到它,然后我需要通过for循环运行它,但是它总是给我一个错误,在空格处分割文件路径。我正在循环中使用“delims=”。以下是我尝试过的一些事情,但都没有成功: 只需将参数传入循环(echo%1以引号括起文件路径) 原因:“Suite”未被识别为内部或外部命令(Suite是第一个空格后的单词) 传递
@echo off
setlocal enableextensions enabledelayedexpansion
for %%a in ("G:\Programming\App Suite 2.0\IT Regional Files\Phone Logs\*.log") do (
call ..\BatchFile\split.bat "%%~fa"
)
endlocal
还尝试了“%~1”,结果与%1相同。请向我们展示运行批处理文件所使用的命令以及传递给它的可能输入参数的示例。到目前为止,我可以看到
“G:\Programming\appsuite”
。在脚本中概述一下您希望对该输入执行的操作可能也会对我们有所帮助。如果您只使用for/f“usebackq skip=4 delims=“%%a in(“%~1”)do(stuff)
,会发生什么情况?给定所提供的信息,这应该基于从第5行开始传递给它的每个日志文件的行内容来完成。这就是您想要它做的吗?我建议打开一个并在中为%I运行(“G:\Programming\App Suite 2.0\it Regional Files\Phone Logs\*.log”)do@echo%I
。您可以看到,for
分配给循环变量I
找到的日志文件的名称,该文件的完整路径没有“
。延迟扩展应仅在真正需要时启用,否则for
循环将无法使用处理正确的文件名代码>在名称中。因此,在下面的另一个批处理文件@echo off
中,您只需要:对于%%I in(“G:\Programming\App Suite 2.0\IT Regional Files\Phone Logs\*.log”)调用“%~dp0..\BatchFile\split.bat”“%%I”
。在cmd窗口中运行调用/?
,了解有关如何引用批处理文件参数的说明<代码>%1
引用传递到批处理文件的参数1,这意味着不使用或使用“
,具体取决于在启动批处理文件的命令行上指定第一个参数字符串的方式。%1
引用第一个参数字符串,如果存在周围”
则删除了周围“
完全可以。因此,使用“%~1”
会导致引用始终包含在“
中的第一个参数字符串,该字符串独立于传递给批处理文件的第一个参数字符串,而不包含或包含”
根据使用for
与/F
和usebackq
的要求。请向我们展示运行批处理文件所使用的命令以及传递给它的可能输入参数的示例。到目前为止,我可以看到“G:\Programming\appsuite”
。在脚本中概述一下您希望对该输入执行的操作可能也会对我们有所帮助。如果您只使用for/f“usebackq skip=4 delims=“%%a in(“%~1”)do(stuff)
,会发生什么情况?给定所提供的信息,这应该基于从第5行开始传递给它的每个日志文件的行内容来完成。这就是您想要它做的吗?我建议打开一个并在中为%I运行(“G:\Programming\App Suite 2.0\it Regional Files\Phone Logs\*.log”)do@echo%I
。您可以看到,for
分配给循环变量I
找到的日志文件的名称,该文件的完整路径没有“
。延迟扩展应仅在真正需要时启用,否则for
循环将无法使用处理正确的文件名代码>在名称中。因此,在下面的另一个批处理文件@echo off
中,您只需要:对于%%I in(“G:\Programming\App Suite 2.0\IT Regional Files\Phone Logs\*.log”)调用“%~dp0..\BatchFile\split.bat”“%%I”
。在cmd窗口中运行调用/?
,了解有关如何引用批处理文件参数的说明<代码>%1
引用传递到批处理文件的参数1,这意味着不使用或使用“
,具体取决于在启动批处理文件的命令行上指定第一个参数字符串的方式。%1
引用第一个参数字符串,如果存在周围”
则删除了周围“
完全可以。因此,使用“%~1”
会导致引用始终包含在“
中的第一个参数字符串,该字符串独立于传递到批处理文件的第一个参数字符串,而不包含或包含”
,这与使用/F
和usebackq
时使用for
的要求相同。
for /f "usebackq skip=4 delims=" %%a in ("%1") do ( stuff )
set fn=%1
set fn=%fn:"=%
for /f "usebackq skip=4 delims=" %%a in ("%fn%") do ( stuff )
set fn=%1
set fn=%fn:"=%
for /f "usebackq skip=4 delims=" %%a in (%fn%) do ( stuff )
@echo off
setlocal enableextensions enabledelayedexpansion
for %%a in ("G:\Programming\App Suite 2.0\IT Regional Files\Phone Logs\*.log") do (
call ..\BatchFile\split.bat "%%~fa"
)
endlocal