我的问题是,我的笔记本电脑上有超过 10,000 张照片文件,我想将它们传输到云端以腾出空间(并使笔记本电脑更快)。但这样做之后,我的搜索引擎“Everything”再也找不到它们了。问题 - 是否可以为每个文件获取一个与每个照片文件同名的单独文本文件?然后“Everything”可以通过搜索关键字(例如 - Peter home wedding)找到文本文件名,所以我知道我已经在云端拥有该文件。这同样适用于我拥有的 500 多个视频文件。将所有文件名放入一个文本文件中是不可能的。只用一个搜索词搜索该单个文本文件,需要几个小时才能得到一个结果。如果可以一次性完成,那就太好了。
答案1
是否可以创建与每个照片文件同名的单独文本文件?
尝试使用福尔菲斯:
forfiles /P "C:\path\to\root\folder" /M *.jpg /S /C "cmd /c echo. > @fname.txt"
要在不创建文本文件的情况下测试命令:
forfiles /P "C:\path\to\root\folder" /M *.jpg /S /C "cmd /c echo @file"
分解:
/P
指定您想要使用的文件夹的路径。/M
搜索特定文件(例如所有带有 的 JPEG 文件*.jpg
)。/S
递归搜索子目录。/C
指定对每个匹配文件执行的命令。echo. > @fname.txt
创建一个“空白”文件,其名称为当前文件名,减去其扩展名,加上.txt
。@fname
占位符由 提供forfiles
。在命令前加上前缀cmd /c
是必要的,因为echo
实际上是 的一部分cmd
。
注意事项:
/P
当和中有空格时,需要使用双引号/C
。forfiles
似乎对 Windows 10 中的占位符大写很挑剔。简而言之,避免使用大写的占位符(例如@fname
不是@FNAME
)。echo. > @fname.txt
创建的文件在技术上会占用磁盘空间(通常为 1KB)。其他方法从命令行创建文件,其中一些可以创建真正的 0 字节文件。
答案2
简单版本,创建一个文本文件,其基本名称与照片文件匹配,内容是关联照片文件的完整路径,使用起来很简单电源外壳:
### Path Variables ###
$Photos = '<path to top-level picture folder(s)>'
$PhotoInfo = '<destination path for text file creation>'
### Create destination directory if it doesn't exist ###
If (!(Test-Path $PhotoInfo)) { mkdir $PhotoInfo }
### (Here-String) + (-Split operator) = Easier editing of list
$PhotoExts = -Split @'
.jpg
.jpeg
.raw
'@ ### Edit as desired
### Text file creation loop ###
Get-ChildItem $Photos -Recurse | Where 'Extension' -in $PhotoExts | ForEach {
$_.FullName | Set-Content -LiteralPath ( '{0}\{1}.txt' -f $PhotoInfo , $_.BaseName )
}
如上所述,如果遇到重复的文件名,上述操作将会抛出错误 - 这是可能的,因为正如所写,脚本不会重新创建源路径的目录结构,而是以递归方式搜索。
如果你只是在控制台上敲击它,上面的循环可以缩短为:
gci $Photos -s | ? 'Extension' -in $PhotoExts | %{
$_.FullName | sc -Lit "$PhotoInfo\$($_.BaseName).txt"
}