我有一个Windowsbatch file,曾经工作,但因为我改变了笔记本电脑,它失败了。
我想这是由我的文件path中的点(。)引起的,但是我一直无法find解决此问题的方法。
我基本上通过一个文件名称到我的batch file,让它处理它,但它开始从文件中读取行时失败:
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.
正如你可以看到最后一个echo'ed文本是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和文件(x86) \ Tools&Help \ bla.txt )
在你的情况下,你应该修改代码
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" )