刚拿到一部新手机并暂时将原有的文件复制到我的电脑C:\ OldPhone \
在我的电脑上是我的所有照片,在D:\ Photos。下面的各种文件夹中。
我想要一些代码列出C:\ OldPhone \下面的所有.jpg文件,这些文件不在D:\ Photos \
之下这有意义吗?只是要强调,文件夹结构不完全相同,我不介意文件的位置,只要它在那里。文件名比较对于初学者来说,添加大小的选项将是一个奖励!
CMD,VBS或powershell会很好,但视觉工作室可以应对的任何事情都可以。
答案 0 :(得分:3)
试试这个:
for /r "D:\Photos" %%a in (*.jpg) do set "$%%~na=1"
for %%a in (C:\OldPhone\*.jpg) do if not defined $%%~na echo %%~a not in d:\photos
cmd有关联数组,例如 awk 。这不适用于包含=
。
答案 1 :(得分:2)
这应该可以在PowerShell“
中完成$ht=@{} # initialize empty hashtable
dir C:\OldPhone\*.jpg -r -file | Foreach {$ht["$($_.Name):$($_.Length)"] = $_.FullName}
dir D:\Photos\*.jpg -r file | Foreach {$ht.Remove("$($_.Name):$($_.Length)")}
$ht # dump remaining hashtable contents
如果您有多个具有相同名称的文件,这也会考虑文件的大小。理想情况下,为了确保它们是相同的,您将包含MD5文件哈希而不是文件长度作为每个文件的哈希表$ht
键的一部分。请注意,-file
参数是PowerShell V3中的新参数。您可能不需要它,除非您有一些.jpg
作为其名称的一部分的文件夹。
答案 2 :(得分:0)
For /R %%i In (newfiles\*.jpg) Do Call :Check "%%~fi"
GoTo :EOF
:Check
For /R %%i In (existingfiles\*.jpg) Do If /I "%%~nxi"=="%~nx1" GoTo :Found
Echo File %1 doesn't already exist!
GoTo :EOF
:Found
Echo File %1 already exists!
GoTo :EOF
答案 3 :(得分:0)
根据Endoro的回答,这是我最终得到的结果。我真的应该把文件夹位置放到变量中,但它现在有效,所以这就是我所需要的!我也应该将setlocal ... endlocal行放入子程序中。 现在我看一下,OLDFOLDER也是一个愚蠢的名字。编码很差!
将任何丢失的.jpg或.mp4文件复制到文件夹中以便于复制。
echo off
set OLDFOLDER=C:\OldPhone
cls
echo Checking for files in %OLDFOLDER% which aren't in D:\Pictures
del /f /q "D:\Documents\MissingFiles\*"
setlocal
for /r "D:\Photos" %%a in (*.jpg) do set "$%%~nxa=1"
for /r "%OLDFOLDER%" %%a in (*.jpg) do if not defined $%%~nxa copy "%%~a" "D:\Documents\MissingFiles\"
endlocal
setlocal
for /r "D:\Photos" %%a in (*.mp4) do set "$%%~nxa=1"
for /r "%OLDFOLDER%" %%a in (*.mp4) do if not defined $%%~nxa copy "%%~a" "D:\Documents\MissingFiles\"
endlocal
if exist "D:\Documents\MissingFiles\*.*p*" (
echo Files missing from D:\Photos copied to D:\Documents\MissingFiles\
) else (
echo There are no files in %OLDFOLDER% which aren't in D:\Photos
)
pause
答案 4 :(得分:-1)
使用fciv(和grep):
fciv .\old -r | grep jpg > old.txt
fciv .\new -r | grep jpg > new.txt
获得
old.txt
6d5f1279d4deccbaeef5d074b13ed2f4 .\old\b\100_1608.jpg
d95e29e2c0172dea438b12c418b09fd3 .\old\b\100_1610.jpg
19f9cda002c951f7a9f870ce74fb1224 .\old\b\100_1601.jpg
32b154f796303a8e9caff0c9d55ba713 .\old\b\100_1600.jpg
26ff43419c4f30764fb015f6d7c869c1 .\old\b\100_1609.jpg
d95e29e2c0172dea438b12c418b09fd3 .\old\a\100_1610.jpg
19f9cda002c951f7a9f870ce74fb1224 .\old\a\100_1601.jpg
32b154f796303a8e9caff0c9d55ba713 .\old\a\100_1600.jpg
new.txt
545b2121a3af2a8e5aa3c5946b450e87 .\new\c\100_1605.jpg
02a1638739302f3c17253beaa3fe9c1b .\new\c\100_1603.jpg
d95e29e2c0172dea438b12c418b09fd3 .\new\c\100_1610.jpg
19f9cda002c951f7a9f870ce74fb1224 .\new\c\100_1601.jpg
32b154f796303a8e9caff0c9d55ba713 .\new\a\100_1600.jpg
使用schema.ini文件:
[old.txt]
Format=Delimited( )
ColNameHeader=False
Col1=MD5 CHAR
Col2=PATH CHAR
[new.txt]
Format=Delimited( )
ColNameHeader=False
Col1=MD5 CHAR
Col2=PATH CHAR
和VBScript:
Option Explicit
Dim goFS : Set goFS = CreateObject("Scripting.FileSystemObject")
Dim oDb : Set oDb = CreateObject("ADODB.Connection")
Dim sCS : sCS = Join(Array(_
"Provider=MSDASQL" _
, "Driver={Microsoft Text Driver (*.txt; *.csv)}" _
, "DBQ=" & goFS.GetAbsolutePathName("..\data") _
), ";")
Dim sSQL : sSQL = "SELECT O.* FROM [old.txt] O LEFT JOIN [new.txt] N ON O.MD5 = N.MD5 WHERE N.MD5 IS NULL"
oDb.Open sCS
Dim oRS : Set oRS = oDb.Execute(sSQL)
If Not oRS.EOF Then WScript.Echo oRS.GetString(2, , "|", vbCrLf, "NULL")
oDB.Close
输出:
6d5f1279d4deccbaeef5d074b13ed2f4|.\old\b\100_1608.jpg
26ff43419c4f30764fb015f6d7c869c1|.\old\b\100_1609.jpg
<强>增加:强>
使用
Dim sSQL : sSQL = "SELECT O.*, N.PATH FROM [old.txt] O INNER JOIN [new.txt] N ON O.MD5 = N.MD5"
你可以得到重复的内容:
d95e29e2c0172dea438b12c418b09fd3|.\old\a\100_1610.jpg|.\new\c\100_1610.jpg
d95e29e2c0172dea438b12c418b09fd3|.\old\b\100_1610.jpg|.\new\c\100_1610.jpg
19f9cda002c951f7a9f870ce74fb1224|.\old\a\100_1601.jpg|.\new\c\100_1601.jpg
19f9cda002c951f7a9f870ce74fb1224|.\old\b\100_1601.jpg|.\new\c\100_1601.jpg
32b154f796303a8e9caff0c9d55ba713|.\old\a\100_1600.jpg|.\new\a\100_1600.jpg
32b154f796303a8e9caff0c9d55ba713|.\old\b\100_1600.jpg|.\new\a\100_1600.jpg