【问题标题】:folders containing spaces loop包含空格循环的文件夹
【发布时间】:2015-05-07 18:19:31
【问题描述】:

我卡住了,已经尝试了我能想到的所有方法,但没有运气。已阅读有关 usebackq 的信息,但无法使其正常工作。

我正在尝试创建一个批处理文件。应该检查 folder1 是否存在。如果确实存在,则批处理文件应该在文件夹 1 中创建名为 Batch_1 Batch_2 的文件夹。将 folder1 中的所有文件移动到 Batch_1,然后将文件从某个位置移动到 batch_2。

如果batch_2 存在,它会创建Batch_3,然后将文件从某个地方移动到batch_3。以此类推。

这是我目前所拥有的。当路径中没有空格时,它就像一个魅力......

@echo off &setlocal

set fullDest="C:\Users\Peppes Bodega\Desktop\hej hej\123"
set fullDest=%fullDest:"=%


if exist "%fullDest%" goto:omg2
echo %fullDest%

:omg1
echo normal flytt syntax
pause
goto:eof

:omg2
if exist %fullDest%\Batch_2 goto:omg3
for /d %%i in (%fullDest%) do (
    pushd %%i\
    set /a count=0
    for /d %%j in (*.*) do set /a count+=1
    popd
    call echo %%count%% folder(s^) in %%i
    call mkdir %fullDest%\Batch_%%count%%
    call MOVE C:\Users\%username%\Desktop\_BP_TEMP\*.txt %fullDest%\Batch_%%count%%
    pushd %%i\
    set /a count=0
    for /d %%j in (*.*) do set /a count+=1
    popd
    call mkdir %fullDest%\Batch_%%count%%
    call MOVE C:\Users\%username%\_BP_TEMP\*.txt %fullDest%\Batch_%%count%%
)
pause
goto:eof
:omg3
for /d %%i in (%fullDest%) do (
    pushd %%i\
    set /a count=0
    for /d %%j in (*.*) do set /a count+=1
    popd
    call mkdir %fullDest%\Batch_%%count%%
    call MOVE C:\Users\%username%\Desktop\_BP_TEMP\*.txt %fullDest%\Batch_%%count%%
)
pause
goto:eof

如果能提供帮助,我会非常感激。cr

【问题讨论】:

标签: loops batch-file for-loop space


【解决方案1】:

首先让我们澄清一些尴尬的语法。

set fullDest="C:\Users\Peppes Bodega\Desktop\hej hej\123"
set fullDest=%fullDest:"=%

不如

设置 "fullDest=C:\Users\Peppes Bodega\Desktop\hej hej\123"

语法SET "var=value"(其中值可能为空)用于确保分配的值中不包含任何杂散的尾随空格。 set /a 可以安全地“无引号”使用。

接下来,for /d 列出目录如果目标包含通配符所以你需要

for /d %%i in ("%fullDest%\*") do (

同样,无论您在何处使用fulldest,都需要将名称括在引号中,以确保将其视为单个项目,而不是列表,因此

if exist "%fullDest%\Batch_2" goto:omg3

(类似于你最初的使用)

call MOVE "C:\Users\%username%\Desktop\_BP_TEMP\*.txt" "%fullDest%\Batch_%%count%%"

move 需要 move source destination - 如图所示的引号告诉 cmd 每个元素可能包含空格)

同样,

call mkdir "%fullDest%\Batch_%%count%%"

等等。

pushds 中的结束 \ 是多余的。

【讨论】:

  • 谢谢 Magoo!现在它完美无缺!我欠你几杯啤酒!
猜你喜欢
  • 2012-02-04
  • 1970-01-01
  • 2018-06-01
  • 1970-01-01
  • 2013-09-14
  • 2018-11-22
  • 1970-01-01
  • 2022-01-21
  • 2012-07-07
相关资源
最近更新 更多