我正在尝试编写一个批处理文件,以将某些子文件夹从一个文件夹移动到另一个文件夹。当我直接在命令中指定要保留的文件夹并将所有其他文件夹移到其他位置时,我实现了这一点,但是我希望用户在命令提示符下输入他要保留的文件夹名称。然后,我希望用户从文件夹位置和目标文件夹位置指定。到目前为止,此批处理文件有效:
@echo off
cd C:\Users\Desktop\Sample
for /F %%D in ('dir /B /A ^| findstr /B /E /V "%1 %2 %3"') do ( REM but the user can enter only 1 param or 5 param, don't know how many they want to enter
REM rmdir %%D /s /q
move %%D C:\Users\Desktop\Sample2
echo Moved file %%D to folder Sample2
)
echo Moved everything from Sample folder except folder: %1 %2 %3 to Sample2
pause
所以在for循环中
for /F %%D in ('dir /B /A ^| findstr /B /E /V "%1 %2 %3"')
对于%1 %2 %3
,我不知道这个批处理文件将有多少个参数:
set /P numOfFilesToKeep=Please enter the number of folder/files you want to keep:
if "%numOfFilesToKeep%"=="" goto Error
echo Number of files: %numOfFilesToKeep%
for /L %%i in (1,1,%numOfFilesToKeep%) do (
set /P fileName=Please enter the name of the file for number %%i:
if "%fileName%"=="" goto Error
echo File name you entered is: %fileName%
for /F %%D in ('dir /B /A ^| findstr /B /E /V "%fileName%"') do ( REM works like this: %1 %2 %3 but how do i know how many variables are being passed in
REM rmdir %%D /s /q
move %%D C:\Users\Desktop\Sample2
echo Moved file %%D to folder Sample2
)
)
GOTO End
:Error
echo You did not enter the number of files
:End
我遇到两个问题:首先,当我输入文件名并将其回显时,它回显了示例文件夹内的其他子文件夹。例如:我有一个config和vars文件夹。当我输入config时,输出显示vars,并保留vars文件夹并将所有其他文件夹移到上方 第二个问题是,当我尝试输入多个文件夹名称时,它仅保留第一个文件夹,将所有其他文件夹移到上方,并尝试保留第二个文件夹,但现在不存在了。如果有更好的方法可以解决此问题,或者对您有所帮助,那么请