【发布时间】:2013-01-03 19:01:11
【问题描述】:
甚至不确定这是否可能,但我想我会试一试。
所以这是我的问题。我需要为所有图像搜索多个大硬盘(1TB 及更大)并将它们移动到一个文件夹中。我遇到的问题是,无论我尝试用什么语言写这个,我似乎都找不到答案。我要么希望它与 vbs 或 bat 相关,要么不使用 robocopy 命令。我的一些驱动器都是不同的格式,例如 fat32 和 ntfs。我尝试使用批处理文件的一些脚本的问题是我的文件名太长。所以我需要它做的主要功能是找到图像,复制它们,如果它们存在,用 _001 _002 重命名它们,计算移动了多少文件,然后最后删除它们或将它们移动到单独的文件夹中删除(a在我眼里更安全一点)。任何帮助将不胜感激,因为我对此完全感到困惑。
这是我正在编写但刚刚停止的一个脚本。问题在于它复制了文件,但由于某种原因没有保留扩展名。这是我在网上找到的,稍微修改了一下代码。我对代码非常熟悉,但由于某种原因似乎无法弄清楚这一点。
@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
【问题讨论】:
-
你试过什么?为什么不使用 Perl?我们知道文件的所有扩展名(.jpg、.gif 等)吗?
-
老实说,从来没有真正想过使用 perl。这对我来说会是更好的选择吗?至于文件扩展名,是的,我正在搜索所有 jpg 扩展名。最终,我想用它来备份以帮助组织我的文件是我的主要目标,以帮助我保持文件井井有条。例如,如果我想在以后搜索 mov 文件。
-
我在原始问题中添加了我正在处理的代码。
-
对于我所有的粗暴文件操作,我使用 Perl,它工作得很好而且非常简单。说它对你来说会“更好”是主观的;)。它是一个了不起的主力,非常适合将快速和简单的文件操作放在一起。对于windows,你可以下载Strawberry,它会运行得很好。
标签: batch-file vbscript cmd