現在のフォルダー内の位置に応じていくつかのファイルを効果的に削除するにはどうすればよいですか(編集:または番号でファイルを取得します)。
できれば、通常の.batファイルを使用した解決策が必要です。
問題は、セットイベントに複数の値を定義する方法です(以下のサンプルコードに示すように1つの値だけではありません)。複数のバイト値を定義する代わりに、新しい値はファイル内のファイルの位置を参照する必要がありますフォルダー。
例(下の画像)は、2、11、12、14の位置にあるフォルダー内のファイルを削除します。
:: Size is in bytes
set "equal.size=20725"
for /f "usebackq delims=;" %%A in ('dir /b /A:-D *.*') do If %%~zA EQU %equal.size% del "%%A"
または、次のようにフォルダ内のファイルに名前を付けることもできます。
1
2
3
4
5
...
100
複数のファイルを削除し、それらの番号を呼び出して効果的な方法は何ですか?
上記の.batコードをその方向に簡単に拡張/変更できますか?
(1つの.batで配列または類似のソリューションを使用していますか?-番号のリストからファイルを削除する方法に関する情報は必要ありません)。
Obs.:あなたのコメントも考慮してください:
問題ありません。
フォルダには_.png
_タイルがあります-3種類basically(ABC)
:
それらのいくつかは色付きで完全に塗りつぶされていますpixels(A)
一部はpixels(B)
で半分だけ埋められますall(C)
で、他のピクセルはピクセルで塗りつぶされていません。
現在、スクリプトは_all C
_とB
、ただし、_all C
_。のみを削除する必要があります現在のスクリプトが
B
とC
、テストすることが2つあります。
_|findstr /b "99\. 100\."
_の場合
_rem :: where B and C :
B == 99\.C == 100\.
rem :: The findstr command would be with ||
')do "%_Path_to_ImageMagick%\magick.exe" "%%~fi" -channel a -separate -format "%%[fx:100.00*mean]%%" info:|findstr /b "99\.100\." >nul || echo=del /q /f "%%~fi"
')do "%_Path_to_ImageMagick%\magick.exe" "%%~fi" -channel a -separate -format "%%[fx:100.00*mean]%%" info:|findstr /b "100\." >nul || echo=del /q /f "%%~fi"
rem :: The findstr command would by with &&
')do "%_Path_to_ImageMagick%\magick.exe" "%%~fi" -channel a -separate -format "%%[fx:100.00*mean]%%" info:|findstr /b "99\.100\." >nul && echo=del /q /f "%%~fi"
')do "%_Path_to_ImageMagick%\magick.exe" "%%~fi" -channel a -separate -format "%%[fx:100.00*mean]%%" info:|findstr /b "100\." >nul && echo=del /q /f "%%~fi"
_
_rem :: where B and C :
B == 100\.C == 99\.
rem :: The findstr command would be with ||
')do "%_Path_to_ImageMagick%\magick.exe" "%%~fi" -channel a -separate -format "%%[fx:100.00*mean]%%" info:|findstr /b "99\. 100\." >nul || echo=del /q /f "%%~fi"
')do "%_Path_to_ImageMagick%\magick.exe" "%%~fi" -channel a -separate -format "%%[fx:100.00*mean]%%" info:|findstr /b "99\." >nul || echo=del /q /f "%%~fi"
rem :: The findstr command would be with &&
')do "%_Path_to_ImageMagick%\magick.exe" "%%~fi" -channel a -separate -format "%%[fx:100.00*mean]%%" info:|findstr /b "99\. 100\." >nul && echo=del /q /f "%%~fi"
')do "%_Path_to_ImageMagick%\magick.exe" "%%~fi" -channel a -separate -format "%%[fx:100.00*mean]%%" info:|findstr /b "99\." >nul && echo=del /q /f "%%~fi"
_
_rem :: where C :
C == 0%.
rem :: The findstr command would be with ||
')do "%_Path_to_ImageMagick%\magick.exe" "%%~fi" -channel a -separate -format "%%[fx:100.00*mean]%%" info:|findstr /b "99\. 100\." >nul || echo=del /q /f "%%~fi"
')do "%_Path_to_ImageMagick%\magick.exe" "%%~fi" -channel a -separate -format "%%[fx:100.00*mean]%%" info:|findstr /b "0%" >nul || echo=del /q /f "%%~fi"
rem :: The findstr command would be with &&
')do "%_Path_to_ImageMagick%\magick.exe" "%%~fi" -channel a -separate -format "%%[fx:100.00*mean]%%" info:|findstr /b "99\. 100\." >nul && echo=del /q /f "%%~fi"
')do "%_Path_to_ImageMagick%\magick.exe" "%%~fi" -channel a -separate -format "%%[fx:100.00*mean]%%" info:|findstr /b "0%" >nul && echo=del /q /f "%%~fi"
_
あなたのコメントを考慮する:
ファイルをチェックし、その結果True
の場合は削除するために、3番目のツールが必要になることがあります。
したがって、ImageMagickを使用して、ファイルを読み取り、不透明度/透明度フレームがあることを確認できます。
_@echo off && cd /d "%~pd0"
Set "_Path_to_Yours_Files=%userprofile%\Pictures\Seletive_PNGs"
Set "_Path_to_ImageMagick=C:\Program Files\ImageMagick-7.0.10-Q16-HDRI"
for /f %%i in ('%__APPDIR__%where.exe "%_Path_to_Yours_Files%:*.png"
')do "%_Path_to_ImageMagick%\magick.exe" "%%~fi" -channel a -separate -format "%% fx:100.00*mean]%%" info:|findstr /b "99\. 100\." >nul || echo=del /q /f "%%~fi"
%__APPDIR__%timeout.exe -1
_
出力を確認したら、_echo=
_を削除してファイルを効果的に削除します。
_')do "%_Path_to_ImageMagick%\magick.exe" "%%~fi" -channel a -separate -format "%%[fx:100.00*mean]%%" info:|findstr /b "99\. 100\." >nul || echo=del /q /f "%%~fi"
_
Obs.:このスクリプトのテスト目的で、ImageMagick-7.0.10-13をダウンロードしました-Q16-HDRI-x64-static.exe
命名規則がわかっている場合、これは非常に簡単な作業です。
@Echo off
Set "No.File=INFO: Could not find files for the given pattern(s)."
Set "Remove#=2 4 8 16 32 64" & REM Arbitrary index.
Set "Ext=Extension type to act upon"
::: - %%I Iterate over index of known file numbers of defined Extension type
::: - %%O Retrieve full path of file If exists using 'where' and Delete
::: - (Nested Loops) 2>Nul Redirect to STDERR when file does not exist.
(For %%I in (%Remove#%) Do For /F "UsebackQ Tokens=* Delims=" %%O In (`"where *_%%I.%Ext%"`) Do If Not "%%~O" == "%No.File%" Del /Q %%O) 2>Nul
REM _ or other 'unique' string prior to file number should be used to ensure pattern is matched to the correct file number
複数のディレクトリにまたがってファイルを操作する場合については、状況に応じて、上記を変更する方法がいくつかあります。
/R
再帰スイッチを追加し、その後にディレクトリパスを追加します。Where /R C:\Path_To\ParentDirectory *_%%I.%Ext%
PowerShellは、このタイプのものに対してははるかに優れており、よりわかりやすくなっています。
特定のタイプのファイルのコレクションを作成し、それぞれに番号を割り当てるには、次のコードが機能します。
$Folder = 'c:\Users\Keith\Screenshots'
Get-ChildItem $Folder *.png | ForEach-Object {$i=1}{
[PSCustomObject]@{
Index = $i++ ;
Path = $_.FullName
}
}
次のようなコレクションが作成されます。
Index Path
----- ----
1 C:\Users\Keith\Screenshots\Add user to Permissions.PNG
2 C:\Users\Keith\Screenshots\Apply to Folders.png
3 C:\Users\Keith\Screenshots\ArrangeBy.png
4 C:\Users\Keith\Screenshots\Attributes - ReadOnly.png
5 C:\Users\Keith\Screenshots\Attributes Column Added.png
6 C:\Users\Keith\Screenshots\Attributes Column.png
7 C:\Users\Keith\Screenshots\Attributes Detail.png
8 C:\Users\Keith\Screenshots\background on-off.png
9 C:\Users\Keith\Screenshots\Capture.PNG
10 C:\Users\Keith\Screenshots\Command wrapped Shortcut.PNG
11 C:\Users\Keith\Screenshots\Context Bacground.png
12 C:\Users\Keith\Screenshots\Context Foreground.png
13 C:\Users\Keith\Screenshots\Date Column Precedence.png
14 C:\Users\Keith\Screenshots\dd-MM-yy.PNG
15 C:\Users\Keith\Screenshots\Deny Delete Permissions.PNG
16 C:\Users\Keith\Screenshots\Display Scaling.png
17 C:\Users\Keith\Screenshots\Display.PNG
18 C:\Users\Keith\Screenshots\Downloads FolderTyype Topview reg settings.png
19 C:\Users\Keith\Screenshots\Explorer Taskbar Thumbnail Context Menu.png
20 C:\Users\Keith\Screenshots\FIle Type Different Display.png
21 C:\Users\Keith\Screenshots\Folder OPtions 1.PNG
22 C:\Users\Keith\Screenshots\Folder options 2.PNG
23 C:\Users\Keith\Screenshots\Folder Properties Customize tab.png
24 C:\Users\Keith\Screenshots\FolderTypes.png
25 C:\Users\Keith\Screenshots\ForumLayoutWrong.PNG
26 C:\Users\Keith\Screenshots\GPS Columns Added.png
27 C:\Users\Keith\Screenshots\GPS Columns Available.png
28 C:\Users\Keith\Screenshots\HKCR Namespace Venn Diagram.png
29 C:\Users\Keith\Screenshots\IDLIist_Absolute.png
30 C:\Users\Keith\Screenshots\Inheritance.png
31 C:\Users\Keith\Screenshots\JumpList Customized.png
32 C:\Users\Keith\Screenshots\JumpList Default.png
33 C:\Users\Keith\Screenshots\Junction Warning.PNG
34 C:\Users\Keith\Screenshots\Libraries.png
35 C:\Users\Keith\Screenshots\Library.png
36 C:\Users\Keith\Screenshots\Location tab.png
37 C:\Users\Keith\Screenshots\MyStats.PNG
38 C:\Users\Keith\Screenshots\ow1.png
39 C:\Users\Keith\Screenshots\ow2.png
40 C:\Users\Keith\Screenshots\ow3.PNG
41 C:\Users\Keith\Screenshots\Permission.PNG
42 C:\Users\Keith\Screenshots\Permissions 1.PNG
43 C:\Users\Keith\Screenshots\Permissions 2.PNG
44 C:\Users\Keith\Screenshots\Permissions 3.PNG
45 C:\Users\Keith\Screenshots\Permissions 4.PNG
46 C:\Users\Keith\Screenshots\Permissions 5.PNG
47 C:\Users\Keith\Screenshots\QuickStop.png
48 C:\Users\Keith\Screenshots\Read-only.png
49 C:\Users\Keith\Screenshots\Repace Permissions.png
50 C:\Users\Keith\Screenshots\Replace Owner.PNG
51 C:\Users\Keith\Screenshots\Reset Folders.png
52 C:\Users\Keith\Screenshots\SaulsalitStats.PNG
53 C:\Users\Keith\Screenshots\Screenshot (1).png
54 C:\Users\Keith\Screenshots\Screenshot (10).png
55 C:\Users\Keith\Screenshots\Screenshot (100).png
56 C:\Users\Keith\Screenshots\Screenshot (101).png
57 C:\Users\Keith\Screenshots\Screenshot (102).png
58 C:\Users\Keith\Screenshots\Screenshot (103).png
59 C:\Users\Keith\Screenshots\Screenshot (104).png
60 C:\Users\Keith\Screenshots\Screenshot (105).png
61 C:\Users\Keith\Screenshots\Screenshot (106).png
62 C:\Users\Keith\Screenshots\Screenshot (107).png
63 C:\Users\Keith\Screenshots\Screenshot (108).png
64 C:\Users\Keith\Screenshots\Screenshot (109).png
65 C:\Users\Keith\Screenshots\Screenshot (11).png
66 C:\Users\Keith\Screenshots\Screenshot (110).png
67 C:\Users\Keith\Screenshots\Screenshot (111).png
68 C:\Users\Keith\Screenshots\Screenshot (112).png
69 C:\Users\Keith\Screenshots\Screenshot (113).png
70 C:\Users\Keith\Screenshots\Screenshot (114).png
71 C:\Users\Keith\Screenshots\Screenshot (115).png
72 C:\Users\Keith\Screenshots\Screenshot (116).png
73 C:\Users\Keith\Screenshots\Screenshot (117).png
74 C:\Users\Keith\Screenshots\Screenshot (118).png
75 C:\Users\Keith\Screenshots\Screenshot (119).png
76 C:\Users\Keith\Screenshots\Screenshot (12).png
77 C:\Users\Keith\Screenshots\Screenshot (120).png
78 C:\Users\Keith\Screenshots\Screenshot (121).png
79 C:\Users\Keith\Screenshots\Screenshot (122).png
80 C:\Users\Keith\Screenshots\Screenshot (123).png
81 C:\Users\Keith\Screenshots\Screenshot (124).png
82 C:\Users\Keith\Screenshots\Screenshot (125).png
83 C:\Users\Keith\Screenshots\Screenshot (126).png
84 C:\Users\Keith\Screenshots\Screenshot (127).png
85 C:\Users\Keith\Screenshots\Screenshot (128).png
86 C:\Users\Keith\Screenshots\Screenshot (129).png
87 C:\Users\Keith\Screenshots\Screenshot (13).png
88 C:\Users\Keith\Screenshots\Screenshot (130).png
89 C:\Users\Keith\Screenshots\Screenshot (131).png
90 C:\Users\Keith\Screenshots\Screenshot (132).png
91 C:\Users\Keith\Screenshots\Screenshot (133).png
92 C:\Users\Keith\Screenshots\Screenshot (134).png
93 C:\Users\Keith\Screenshots\Screenshot (135).png
94 C:\Users\Keith\Screenshots\Screenshot (136).png
95 C:\Users\Keith\Screenshots\Screenshot (137).png
96 C:\Users\Keith\Screenshots\Screenshot (138).png
97 C:\Users\Keith\Screenshots\Screenshot (139).png
98 C:\Users\Keith\Screenshots\Screenshot (14).png
99 C:\Users\Keith\Screenshots\Screenshot (140).png
100 C:\Users\Keith\Screenshots\Screenshot (141).png
101 C:\Users\Keith\Screenshots\Screenshot (142).png
102 C:\Users\Keith\Screenshots\Screenshot (143).png
103 C:\Users\Keith\Screenshots\Screenshot (144).png
104 C:\Users\Keith\Screenshots\Screenshot (145).png
105 C:\Users\Keith\Screenshots\Screenshot (146).png
106 C:\Users\Keith\Screenshots\Screenshot (147).png
107 C:\Users\Keith\Screenshots\Screenshot (148).png
108 C:\Users\Keith\Screenshots\Screenshot (149).png
109 C:\Users\Keith\Screenshots\Screenshot (15).png
110 C:\Users\Keith\Screenshots\Screenshot (150).png
111 C:\Users\Keith\Screenshots\Screenshot (151).png
112 C:\Users\Keith\Screenshots\Screenshot (152).png
113 C:\Users\Keith\Screenshots\Screenshot (153).png
114 C:\Users\Keith\Screenshots\Screenshot (154).png
115 C:\Users\Keith\Screenshots\Screenshot (155).png
116 C:\Users\Keith\Screenshots\Screenshot (156).png
117 C:\Users\Keith\Screenshots\Screenshot (157).png
118 C:\Users\Keith\Screenshots\Screenshot (158).png
119 C:\Users\Keith\Screenshots\Screenshot (159).png
120 C:\Users\Keith\Screenshots\Screenshot (16).png
121 C:\Users\Keith\Screenshots\Screenshot (160).png
このコレクションを使用すると、インデックス/位置によってファイルを簡単に選択できます。
$FileNums = @(2,11,12,14)
$Folder = 'c:\Users\Keith\Screenshots'
Get-ChildItem $Folder *.png | ForEach-Object {$i=1}{
[PSCustomObject]@{
Index = $i++ ;
Path = $_.FullName
}
} | Where Index -in $FileNums
これにより、以下の出力が得られます。
Index Path
----- ----
2 C:\Users\Keith\Screenshots\Apply to Folders.png
11 C:\Users\Keith\Screenshots\Context Bacground.png
12 C:\Users\Keith\Screenshots\Context Foreground.png
14 C:\Users\Keith\Screenshots\dd-MM-yy.PNG
私たちの目標はファイルの削除なので、これらをRemove-Item
にパイプすることができます。 「FullName」を「Path」にマッピングしたのは、値をRemove-Item
の-Path
パラメータに一致させるためであり、パイプライン入力を受け入れます。
次のコードを安全に実行して、適切なファイルが見つかったかどうかをテストできます。存在する場合は、-whatif
コマンドレットからRemove-Item
パラメータを削除します
$FileNums = @(2,11,12,14)
Get-ChildItem $Folder *.png | ForEach-Object {$i=1} {
[PSCustomObject]@{
Index = $i++ ;
Path = $_.FullName
}
} | Where Index -in $FIleNums | Remove-Item -whatif