我陷入困境,尝试过我能想到的一切,但没有运气。已阅读有关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
我会非常乐意帮助你。
答案 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
是多余的。