甚至不确定这是否可能,但我想我会试一试。
所以这是我的问题。我需要为所有图像搜索多个大硬盘(1TB 及更大)并将它们移动到一个文件夹中。我遇到的问题是,无论我尝试用什么语言写这个,我似乎都找不到答案。我要么希望它与 vbs 或 bat 相关,要么不使用 robocopy 命令。我的一些驱动器都是不同的格式,例如 fat32 和 ntfs。我尝试使用批处理文件的一些脚本的问题是我的文件名太长。所以我需要它做的主要功能是找到图像,复制它们,如果它们存在,用 _001 _002 重命名它们,计算移动了多少文件,然后最后删除它们或将它们移动到单独的文件夹中进行删除(在我眼里更安全一点)。任何帮助将不胜感激,因为我对此完全感到困惑。
这是我正在编写但刚刚停止的一个脚本。问题在于它复制了文件,但由于某种原因没有保留扩展名。这是我在网上找到的,稍微修改了一下代码。我对代码非常熟悉,但由于某种原因似乎无法弄清楚这一点。
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
set TESTFOLDER=allpictures
md "%TESTFOLDER%"
set /a counter=0
FOR /F "tokens=*" %%i IN ('DIR /S /B /A-D C:\Users\user1\Desktop\*.jpg') DO FOR /F "tokens=*" %%j IN ('DIR /B "%%i"') DO IF EXIST ".\%TESTFOLDER%\%%j" (
set /a counter=!counter!+1
echo folder: %TESTFOLDER%
copy "%%i" ".\%TESTFOLDER%\%%j_!counter!"
) ELSE copy /B "%%i" ".\%TESTFOLDER%\%%j"
:eof
编辑:下面的VBScript代码
Set fso = CreateObject("Scripting.FileSystemObject")
testfolder = ".\allpictures"
'fso.CreateFolder(testfolder)
CopyFiles fso.GetFolder("E:\")
Sub CopyFiles(fldr)
For Each f In fldr.Files
basename = fso.GetBaseName(f)
extension = fso.GetExtensionName(f)
If LCase(extension) = "jpg" Then
dest = fso.BuildPath(testfolder, f.Name)
count = 0
Do While fso.FileExists(dest)
count = count + 1
dest = fso.BuildPath(testfolder, basename & "_" & count & "." _
& extension)
Loop
f.Copy dest
End If
Next
For Each sf In fldr.SubFolders
CopyFiles sf
Next
End Sub