第一个批处理文件搜索目录并将文件名复制为变量...
@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
错误在哪里?谢谢,詹姆斯
答案 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