私が見つけた他のいくつかの回答に基づいて、利用可能なドライブラベルをループできます。ただし、そのドライブに変更できないようです。
for /f "skip=1 delims=" %%x in ('wmic logicaldisk get caption') do (
%%x
dir
)
それは私に与えます:
PS C:\> .\something.bat
C:\>for /F "skip=1 delims=" %x in ('wmic logicaldisk get caption') do (
%x
dir
)
C:\>(
:
dir
)
The filename, directory name, or volume label syntax is incorrect.
Volume in drive C has no label.
Volume Serial Number is 9CE0-91A0
Directory of C:\
07/14/2018 09:54 AM 1,586 compact-all.bat
06/25/2018 01:03 PM <JUNCTION> Documents and Settings [C:\Users]
07/14/2018 08:03 AM <DIR> Fraps
06/25/2018 01:07 PM <DIR> Intel
06/25/2018 02:18 PM <DIR> NVIDIA
04/11/2018 05:38 PM <DIR> PerfLogs
07/13/2018 08:32 AM <DIR> Program Files
07/13/2018 04:56 PM <DIR> Program Files (x86)
06/25/2018 02:12 PM <DIR> Python27
07/14/2018 12:26 PM 7,404 result.txt
07/14/2018 12:26 PM 83 something.bat
06/25/2018 01:08 PM <DIR> Users
06/30/2018 02:19 PM <DIR> Windows
3 File(s) 9,073 bytes
10 Dir(s) 84,364,111,872 bytes free
C:\>(
:
dir
)
The filename, directory name, or volume label syntax is incorrect.
Volume in drive C has no label.
Volume Serial Number is 9CE0-91A0
Directory of C:\
07/14/2018 09:54 AM 1,586 compact-all.bat
06/25/2018 01:03 PM <JUNCTION> Documents and Settings [C:\Users]
07/14/2018 08:03 AM <DIR> Fraps
06/25/2018 01:07 PM <DIR> Intel
06/25/2018 02:18 PM <DIR> NVIDIA
04/11/2018 05:38 PM <DIR> PerfLogs
07/13/2018 08:32 AM <DIR> Program Files
07/13/2018 04:56 PM <DIR> Program Files (x86)
06/25/2018 02:12 PM <DIR> Python27
07/14/2018 12:26 PM 7,404 result.txt
07/14/2018 12:26 PM 83 something.bat
06/25/2018 01:08 PM <DIR> Users
06/30/2018 02:19 PM <DIR> Windows
3 File(s) 9,073 bytes
10 Dir(s) 84,364,111,872 bytes free
C:\>(
:
dir
)
The device is not ready.
Volume in drive C has no label.
Volume Serial Number is 9CE0-91A0
Directory of C:\
07/14/2018 09:54 AM 1,586 compact-all.bat
06/25/2018 01:03 PM <JUNCTION> Documents and Settings [C:\Users]
07/14/2018 08:03 AM <DIR> Fraps
06/25/2018 01:07 PM <DIR> Intel
06/25/2018 02:18 PM <DIR> NVIDIA
04/11/2018 05:38 PM <DIR> PerfLogs
07/13/2018 08:32 AM <DIR> Program Files
07/13/2018 04:56 PM <DIR> Program Files (x86)
06/25/2018 02:12 PM <DIR> Python27
07/14/2018 12:26 PM 7,404 result.txt
07/14/2018 12:26 PM 83 something.bat
06/25/2018 01:08 PM <DIR> Users
06/30/2018 02:19 PM <DIR> Windows
3 File(s) 9,073 bytes
10 Dir(s) 84,364,111,872 bytes free
C:\>(
dir
)
Volume in drive C has no label.
Volume Serial Number is 9CE0-91A0
Directory of C:\
07/14/2018 09:54 AM 1,586 compact-all.bat
06/25/2018 01:03 PM <JUNCTION> Documents and Settings [C:\Users]
07/14/2018 08:03 AM <DIR> Fraps
06/25/2018 01:07 PM <DIR> Intel
06/25/2018 02:18 PM <DIR> NVIDIA
04/11/2018 05:38 PM <DIR> PerfLogs
07/13/2018 08:32 AM <DIR> Program Files
07/13/2018 04:56 PM <DIR> Program Files (x86)
06/25/2018 02:12 PM <DIR> Python27
07/14/2018 12:26 PM 7,404 result.txt
07/14/2018 12:26 PM 83 something.bat
06/25/2018 01:08 PM <DIR> Users
06/30/2018 02:19 PM <DIR> Windows
3 File(s) 9,073 bytes
10 Dir(s) 84,364,111,872 bytes free
PS C:\>
しかし、私が欲しいのは、ドライブc:、d:などに移動してコマンドを実行することです。
私は通常、次のようなことができることを知っています
dir %%x
すべてのドライブの内容を圧縮(圧縮)するスクリプトを作成していますが、実行するとすべてのファイルを通過しないため、パラメーターを正しく取得できないようです。
compact d:
dのルートにのみ影響します。
versus
d:
compact
これは、d上のすべてのファイルとディレクトリに影響します。
コマンドプロンプトディレクトリが変更先のドライブ文字とは異なるドライブ文字を使用しているときに特定のドライブ文字に変更するには、_ [〜#〜] cd [〜を指定して/D
パラメーターを使用するだけです。 #〜] コマンド(例CD /D <DriveLetter>:
)は、続行するコマンドを実行する前に別のドライブ文字に変更します。
[〜#〜] for [〜#〜]ループでdelims="
を使用することは省略してください。これは、スペースが区切り文字ではないことを示しているため、スペースを使用したくないためです。 cr/cr/lf
LotPings コメントに従って問題。
FOR /?
delims=xxx - specifies a delimiter set. This replaces the default delimiter set of space and tab.
それはスペースとタブのデフォルトの区切り文字セットを示しているので、等号記号delims="
の後に二重引用符を付けて="
を置くと、それがないことを示します区切り文字。
Compact は、引数にパスを指定せずにディレクトリ内のファイルに対して実行されるため、該当する場合、最初にCD /D <Letter>:
を実行し、次にCompact /C
を実行してディレクトリ内のすべてのファイルを圧縮できますまたはCompact /C /S
は、ディレクトリ内のすべてのファイルとフォルダーを再帰的に圧縮します。
for /f "skip=1" %%x in ('wmic logicaldisk get caption') do (
CD /D %%x
Compact /C /S
<Next or other command>
)
注:ドライブ文字は
<letter>:
形式でリストされます。H:
。したがって、CD /D H:
は問題なく動作します。あなたは明らかに\
を反復された%%x
の最後に追加します。%%x\
コマンド引数としてフルパス(%%x\folder\path
)を使用するためにパスを追加する必要がある場合dir %%x\folder\path
。
Key /D : change the current DRIVE in addition to changing folder.
Key /C Compress the specified files. Directories will be marked so that files added afterward will be compressed. /S Perform the specified operation on files in the given directory and all subdirectories. Default "dir" is the current directory.
次のバッチファイル(test.cmd)を使用します。
@echo off
setlocal enabledelayedexpansion
rem skip=1 to remove the header
rem findstr to remove blank lines
for /f "skip=1" %%d in ('wmic logicaldisk get caption ^| findstr /r /v "^$"') do (
cd /d %%d\
dir
)
endlocal
ノート:
dir
を、各ドライブのルートで実行するコマンドに置き換えます。