[英]Filenames with . in batch file
我有一个Windows批处理文件,该文件曾经可以工作,但是由于我更换了笔记本电脑,因此失败。
我想这是由文件路径中的点(。)引起的,但是我找不到解决此问题的方法。
我基本上将文件名传递给我的批处理文件,并对其进行处理,但是当它开始从文件中读取行时失败:
echo MBP File: %1
rem Check that the file is a MapBasic Project File
if /I "%~sx1" NEQ ".mbp" (
echo Error: file %~dpnx1 is not a MapBasic Project File ^(^*.mbp^)
goto :EOF
) else (
echo file %1 is a MapBasic Project File ^(^*.mbp^)
)
echo Looping MBP
for /f "usebackq skip=1 delims== tokens=2" %%j in (%1) do (
echo Checking input file from MBP
echo j: %%j
SET filemb=%~dp1%%j
....
输出看起来像这样:
file "D:\Dropbox (Some-Name)\3. MB_Kode\mbInfoSelHandler\mbcode\InfoSelHandler.mbp" is a MapBasic Project File (*.mbp)
Looping MBP
\3. was unexpected at this time.
如您所见,最后回显的文本是Looping MBP
该文件包含以下行:
[LINK]
Application=..\InfoSelHandler.mbx
Module=Library\ARRAYLib.mbo
Module=Library\CONFIGFILELib.mbo
Module=Library\DEBUGLib.mbo
我假设这行中有问题,但是我不确定:
for /f "usebackq skip=1 delims== tokens=2" %%j in (%1) do (
有什么提示吗?
进一步解释为什么应该始终使用引号。
当路径中包含括号或与号时,您就会遇到麻烦,例如
C:\\Program and files (x86)\\Tools&Help\\bla.txt
当您在不使用引号的情况下使用它时,会出现语法错误。
简化代码
for /f "usebackq" %%j in (%1) do (
SET var=%~dp1
)
只要%1
用引号引起来, FOR /F
本身就起作用,但是如果缺少引号,它就会失败。
但是SET var=%~dp1
破坏了代码,因为在将FOR块解析为
set var=C:\Program and files (x86)\Tools&Help\bla.txt
x86)
\\Tools&Help\\bla.txt
括号关闭了FOR块, \\Tools&Help\\bla.txt
在该块之外,并产生语法错误。
for /f "usebackq" %%j in (%1) do ( SET var=C:\Program and files (x86)
对于您的情况,您应该将代码修改为
for /f "usebackq skip=1 delims== tokens=2" %%j in ("%~1") do (
echo Checking input file from MBP
echo j: %%j
SET "filemb=%~dp1%%j"
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.