batch-file - 尽管指定了分隔符,但在传递带有空格的文件名变量时,循环的批处理文件不起作用
问题描述
这是我第一次使用批处理文件,如果这很简单,我很抱歉我错过了。
我有一个批处理文件,我需要向其传递文件路径/名称。这条路径有空格。据我所知,要传递它,我需要在它周围加上引号。一旦我在批处理文件中得到它,那么我需要通过 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 相同的结果。
解决方案
推荐阅读
- r - 如何在 Rshiny 中使两个菜单相互依赖或分层?
- graph - Tableau - 创建小倍数图表,显示 covid-19 疫苗副作用文本字段中各种关键字的频率
- discord - 尽管已授予 Bot 管理员权限,但仍要求 Kick Member 许可
- sql - 触发器评估哪些被删除的行在新数据中不存在并将它们插入到新表中
- android - 如何在 android 中删除 EditText 材料设计底线?
- spring-boot - Spring boot 在执行之前解压应用程序
- linux - 是否有一种方法可以打印与字符串匹配的所有行(这部分已完成)以及该字符串之后的一组行数?
- java - networkx 和 JGraphT 之间 katz 中心性得分的差异
- node.js - 无法读取未定义 post.comments 的属性“unshift”
- c - 用于在 C 中将字符串定义为 num 的内联 sprintf()?