包含空格循环的文件夹

时间:2015-05-07 18:19:32

标签: loops batch-file for-loop space

我陷入困境,尝试过我能想到的一切,但没有运气。已阅读有关usebackq的内容,但无法使用。

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

如果batch_2存在,则shold创建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

我会非常乐意帮助你。

1 个答案:

答案 0 :(得分: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"(其中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%%"

等等。

\中的结束pushd是多余的。