首页 > 解决方案 > 尽管指定了分隔符,但在传递带有空格的文件名变量时,循环的批处理文件不起作用

问题描述

这是我第一次使用批处理文件,如果这很简单,我很抱歉我错过了。

我有一个批处理文件,我需要向其传递文件路径/名称。这条路径有空格。据我所知,要传递它,我需要在它周围加上引号。一旦我在批处理文件中得到它,那么我需要通过 for 循环运行它,但它总是给我一个错误,即在空格处拆分文件路径。我在循环中使用“delims =”。以下是我尝试过的一些事情,但都没有奏效:

只是将参数传递到循环中(echo %1 带有引号中的文件路径)

for /f "usebackq skip=4 delims=" %%a in (%1) do ( stuff )

原因:“Suite”未被识别为内部或外部命令(Suite 是第一个空格后的单词)

传递用引号括起来的参数(echo "%1" 产生用两个引号括起来的文件路径)

for /f "usebackq skip=4 delims=" %%a in ("%1") do ( stuff )

原因:系统找不到文件“G:\Programming\App”(第一个空格之前的东西)

去掉引号并在引号中传递变量(echo "%fn%" 再次在引号中生成文件路径)

set fn=%1
set fn=%fn:"=%
    for /f "usebackq skip=4 delims=" %%a in ("%fn%") do ( stuff )

原因:“Suite”未被识别为内部或外部命令

去掉引号并传入不带引号的变量(echo %fn% 生成不带引号的完整文件路径)

set fn=%1
set fn=%fn:"=%
    for /f "usebackq skip=4 delims=" %%a in (%fn%) do ( stuff )

原因:系统找不到文件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 相同的结果。

标签: batch-file

解决方案


推荐阅读