批处理文件左侧字符串修剪不起作用

时间:2016-10-21 12:11:55

标签: batch-file

巨大的新人。 我有两个正在运行的批处理文件,但是当我尝试将它们组合时,它会失败。

第一个批处理文件搜索目录并将文件名复制为变量...

@echo off
setlocal disableDelayedExpansion
cd I:\Test\Batches\New folder (2)\New folder
set "files="
for /r %%F in (*) do call set files=%%files%% "%%F"
echo %files% | clip

在我的情况下,文件夹中有一个文件,它会复制

"我:\ Test \ Batches \ New folder(2)\ New folder \ Fotolia_93178533_Subscription_Monthly_M.jpg"

到剪贴板

第二个批处理文件用于将变量左侧修剪为左侧四个字符。它可以独立工作。

set str=politic
echo.%str%
set str=%str:~0,4%
echo.%str%

但是当我尝试将两者结合起来时,它无法正常工作。没有任何东西写在剪贴板上。

@echo off
setlocal disableDelayedExpansion
cd I:\Test\Batches\New folder (2)\New folder
set "files="
for /r %%F in (*) do call set files=%%files%% "%%F"
echo %files%
set files=%files:~0,4%
echo %files% | clip

错误在哪里?谢谢,詹姆斯

2 个答案:

答案 0 :(得分:0)

问题的原因是CMD.EXE与变量扩展一起工作的方式:它在解析命令之前执行扩展。因此,您将变量files设置为

"我:\ Test \ Batches \ New folder(2)\ New folder \ Fotolia_93178533_Subscription_Monthly_M.jpg"

然后命令set files=%files:~0,4%将其设置为"I: - 因此它缺少结束引用。

然后是命令

echo %files% | clip

实际上被视为

echo  "I: | clip

并将管道符|视为(未闭合)字符串的一部分。

我希望你可能不想剪辑引号字符,但是后面的四个字符:set files=files:~2,4%应该这样做。否则,请启用延迟展开并使用!代替%

答案 1 :(得分:0)

您确定不只是想在 cmd.exe 提示下执行此操作吗?

@For %A In ("I:\Test\Batches\New folder (2)\New folder\*.*") Do @Echo(%~dpnA|Clip

或引号:

@For %A In ("I:\Test\Batches\New folder (2)\New folder\*.*") Do @Echo("%~dpnA"|Clip

甚至:

@For %A In ("I:\Test\Batches\New folder (2)\New folder\*.*") Do @Echo(%~pnxA|Clip

或引号:

@For %A In ("I:\Test\Batches\New folder (2)\New folder\*.*") Do @Echo("%~pnxA"|Clip