カンマ区切りの入力に基づいて一連のネストされたフォルダを作成する単純なバッチファイルを作成しようとしています。次のコードでは、GSDはすべてが存続するマスターフォルダです。そこから、ユーザはコンマで区切られた異なるブロックを入力する。これは、A、B、CまたはZ、G、Iなどとすることができます。バッチファイルのユーザー入力に基づくフォルダ作成のトラブルシューティング
この入力に基づいて、バッチファイルはブロック固有のフォルダを作成し、すべてを適切にネストする必要があります。ユーザーが1つのブロック(つまりA)のみを入力したときにコードが完全に機能するが、複数のブロック(つまりA、B、C)の入力を使用して実行しようとするとアクセスが拒否される。私のコーディングの知識は誰の目の前にもないので、どんな助力も大いに評価されます。
ブロックフォルダを他のフォルダ内に入れ子にしようとしています。その後、GSDの下にあるすべてのフォルダを入れ子にしようとしています。私はなるようにコードを変更したコメントに基づいて
@echo off
rem Get User Input
set /p gsd= Enter the GSD of the project:
set /p blocks= Enter the blocks you are prepping a drive for separated by commas (i.e. A,B,C,etc.):
set ItemCount=0
mkdir %gsd%
mkdir 01-Workspace_Setup
mkdir 02-Tiles
mkdir 03-Orthos
mkdir 04-Saved_Workspaces
mkdir 05-Backup
mkdir 06-Raw
mkdir 07-Excluded
mkdir ECW
mkdir FixPoints
mkdir ImageFrames
mkdir PCR
mkdir ProjectInfo
mkdir Seamlines
mkdir TrackingGrid
mkdir FixTo_Boundary
:NextItem
if "%blocks%" == "" pause & goto :EOF
set /A ItemCount+=1
for /F "tokens=1* delims=," %%a in ("%blocks%") do (
mkdir Block_%%a
move /y Block_%%a .\02-Tiles
mkdir Block_%%a
move /y Block_%%a .\03-Orthos
mkdir Block_%%a
move /y Block_%%a .\06-Raw
mkdir Block_%%a
move /y Block_%%a .\07-Excluded
mkdir Block_%%a
move /y Block_%%a .\ECW
mkdir Block_%%a
move /y Block_%%a .\FixPoints
mkdir Block_%%a
move /y Block_%%a .\ImageFrames
mkdir Block_%%a
move /y Block_%%a .\PCR
mkdir Block_%%a
move /y Block_%%a .\ProjectInfo
mkdir Block_%%a
move /y Block_%%a .\Seamlines
mkdir Block_%%a
move /y Block_%%a .\TrackingGrid
mkdir Block_%%a
move /y Block_%%a .\FixTo_Boundary
set "blocks=%%b"
move /y ECW .\01-Workspace_Setup
move /y FixPoints .\01-Workspace_Setup
move /y ImageFrames .\01-Workspace_Setup
move /y PCR .\01-Workspace_Setup
move /y ProjectInfo .\01-Workspace_Setup
move /y Seamlines .\01-Workspace_Setup
move /y TrackingGrid .\01-Workspace_Setup
move /y FixTo_Boundary .\01-Workspace_Setup
move /y 01-Workspace_Setup .\%gsd%
move /y 02-Tiles .\%gsd%
move /y 03-Orthos .\%gsd%
move /y 04-Saved_Workspaces .\%gsd%
move /y 05-Backup .\%gsd%
move /y 06-Raw .\%gsd%
move /y 07-Excluded .\%gsd%
)
goto NextItem
echo Folder creation complete. Have a pleasant day!
pause
:1つのブロックで実行すると
@echo off
rem Get User Input
set /p gsd= Enter the GSD of the project:
set /p blocks= Enter the blocks you are prepping a drive for separated by commas (i.e. A,B,C,etc.):
mkdir %gsd%
mkdir 01-Workspace_Setup
mkdir 02-Tiles
mkdir 03-Orthos
mkdir 04-Saved_Workspaces
mkdir 05-Backup
mkdir 06-Raw
mkdir 07-Excluded
mkdir ECW
mkdir FixPoints
mkdir ImageFrames
mkdir PCR
mkdir ProjectInfo
mkdir Seamlines
mkdir TrackingGrid
mkdir FixTo_Boundary
if %blocks% == "" pause & goto :EOF
for %%a in (%blocks%) do (
mkdir Block_%%a
move /y Block_%%a .\02-Tiles
mkdir Block_%%a
move /y Block_%%a .\03-Orthos
mkdir Block_%%a
move /y Block_%%a .\06-Raw
mkdir Block_%%a
move /y Block_%%a .\07-Excluded
mkdir Block_%%a
move /y Block_%%a .\ECW
mkdir Block_%%a
move /y Block_%%a .\FixPoints
mkdir Block_%%a
move /y Block_%%a .\ImageFrames
mkdir Block_%%a
move /y Block_%%a .\PCR
mkdir Block_%%a
move /y Block_%%a .\ProjectInfo
mkdir Block_%%a
move /y Block_%%a .\Seamlines
mkdir Block_%%a
move /y Block_%%a .\TrackingGrid
mkdir Block_%%a
move /y Block_%%a .\FixTo_Boundary
)
move /y ECW .\01-Workspace_Setup
move /y FixPoints .\01-Workspace_Setup
move /y ImageFrames .\01-Workspace_Setup
move /y PCR .\01-Workspace_Setup
move /y ProjectInfo .\01-Workspace_Setup
move /y Seamlines .\01-Workspace_Setup
move /y TrackingGrid .\01-Workspace_Setup
move /y FixTo_Boundary .\01-Workspace_Setup
move /y 01-Workspace_Setup .\%gsd%
move /y 02-Tiles .\%gsd%
move /y 03-Orthos .\%gsd%
move /y 04-Saved_Workspaces .\%gsd%
move /y 05-Backup .\%gsd%
move /y 06-Raw .\%gsd%
move /y 07-Excluded .\%gsd%
echo Folder creation complete. Have a pleasant day!
pause
、すべてのものは、それが表示されます動作します。 Block_%%a
フォルダはどこに配置されていても構いません。変数または複数の変数(A、B、C)を指定せずに実行すると、そのことは爆発し、機能しません。 Block_%%a
フォルダ以外のすべてのフォルダが作成され、何も入れ子にされません。私はそれを作成しようとしたので、すでにネストされたフォルダを構築するだけですが、それを行うための正しい構文を理解できませんでした。
IMO新しいフォルダを作成してから別のフォルダに移動することはできません。代わりに、フォルダに直接作成してください。拡張子がebabled(デフォルト)の場合、mdは中間のフォルダも作成します。これは 'md /? 'を参照してください。 '%gsd%'を最初にCD化せずに、新しいフォルダはすべて現在のフォルダに作成されます。 – LotPings
変数%blocks%を処理するには、単純な 'for %% a in(%blocks%)do ...'を使ってください。 'for/f' – LotPings