批处理:将变量和字符串连接起来形成输出路径

3
我有一个批处理文件,用户输入一个文件路径,我从中提取文件名。
我使用该文件名创建一个同名的文件夹。
在该文件夹中,我想创建一个log.txt文件,让我在批处理文件中调用的进程可以将其日志消息写入其中。
以下是代码:
set /p pathFoFile="Enter path fo file: "
FOR %%i IN ("%pathFoFile%") DO (
    set outputFolder=%%~ni
)

someprocess -p1 blabla -p2 blabla -p3 %outputFolder% > %outputFolder%\log.txt

最后一个部分%outputFolder%\log.txt似乎是问题所在,因为当我只放置> log.txt时它是有效的。然而,当我回显它时:
echo %outputFolder%\log.txt

它打印了正确的路径。

我如何使用文件夹名称并创建log.txt文件?

编辑

我得到的路径可能是这样的:

..\some\folder\thefile.egf

或者只是
thefile.egf

或者是绝对路径。
我提取了。
thefile

and would like to call:

someprocess -p1 blabla -p2 blabla -p3 thefile > thefile\log.txt

要创建一个包含log.txtthefile文件夹,相对于批处理文件。路径中没有驱动器号。

当使用%outputFolder%\log.txt"%outputFolder%\log.txt"时,我收到的错误是系统找不到路径。


我尝试使用 dir 替换 someprocess 运行了这个脚本,它可以正常工作。你输入的路径是否包含驱动器号并且没有斜杠? - leetibbett
我编辑了我的问题。 - user3813234
我想我明白了:文件夹是由进程创建的。而进程需要一点时间来创建文件夹。当我执行> folder/log.txt时,文件夹还没有被创建...这可能就是原因。 - user3813234
你不能将重定向到尚不存在的文件夹中,因此在像 > "%outputFolder%\log.txt" 这样重定向之前,你需要执行 mkdir "%outputFolder%" 命令创建该文件夹。(在所有路径周围加上引号以避免潜在的空格或特殊字符问题。) - aschipfl
2个回答

2

如果路径中有空格,请使用引号。

someprocess -p1 blabla -p2 blabla -p3 "%outputFolder%" > "%outputFolder%\log.txt"

这个不起作用。我仍然得到相同的错误。而且路径中不能有空格,因为文件名中不会有空格。我正在使用文件名作为文件夹名。 - user3813234
1
很可能该文件夹不存在。'SomeProcess'是做什么的?它是否应该创建该文件夹?如果不是,请执行MD“%OutFolder%”。 - RGuggisberg

0

%%~dpni 会将变量扩展为包括驱动器、路径和文件名。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接