実現したいこと
キッティングの作業に使用する予定のバッチファイルを作成しています。
大まか行いたいことは実行できていますが、一か所だけうまくいかない箇所があります。
発生している問題・分からないこと
こちらの処理のなかで、> 引用テキスト@rem 本社勤務かつBP以外の場合にscanフォルダを作成
if "%WorkplaceType%"=="本社勤務" (
if "%Dept%"=="BP" (
echo 本社勤務ですが、BPのため、scanフォルダを作成しません。
) else (
echo 本社勤務のため、scanフォルダを作成します。
mkdir "C:\Users%UserName%\Desktop\scan"
net share scan="C:\Users%UserName%\Desktop\scan" /GRANT:everyone,FULL
icacls "C:\Users%UserName%\Desktop\scan" /grant Everyone:(OI)(CI)F /T
)
) else (
echo 本社勤務ではないため、scanフォルダを作成しません。
)
こちらの処理に到達した瞬間に、if文に入ることなくバッチの処理が終了し、cmdが閉じてしまいます。
エラーメッセージ
error
1突然ばっちの処理が終わってしまいます。
該当のソースコード
@echo off @rem 管理者権限の確認 whoami /priv | find "SeDebugPrivilege" > nul if %errorlevel% neq 0 ( @powershell start-process %~0 -verb runas exit ) :select_workplace @rem 勤務形態の選択 echo 勤務形態を選択してください。 echo 1: 本社勤務 echo 2: 本社勤務ではない set /p Workplace="番号を入力してください (1/2): " if "%Workplace%"=="1" ( set WorkplaceType=本社勤務 ) else if "%Workplace%"=="2" ( set WorkplaceType=本社勤務ではない ) else ( echo 無効な入力です。もう一度選択してください。 goto select_workplace ) :select_department @rem 所属部署の選択 echo. echo 所属部署を選択してください。 echo 1: 管理部 echo 2: 人事部 echo 3: 営業 echo 4: その他 echo 5: BP set /p DeptNum="番号を入力してください (1-5): " @rem 所属部署に応じて変数を設定 if "%DeptNum%"=="1" ( set Dept=管理部 set UserNameFormat=小文字.小文字 ) else if "%DeptNum%"=="2" ( set Dept=人事部 set UserNameFormat=大文字.大文字 ) else if "%DeptNum%"=="3" ( set Dept=営業 set UserNameFormat=小文字_小文字 ) else if "%DeptNum%"=="4" ( set Dept=その他 set UserNameFormat=社員番号_小文字 ) else if "%DeptNum%"=="5" ( set Dept=BP set UserNameFormat=BP_小文字 ) else ( echo 無効な入力です。もう一度選択してください。 goto select_department ) @rem 名前を入力させる set /p FirstName="名前 (ローマ字で) を入力してください: " set /p LastName="姓 (ローマ字で) を入力してください: " @rem その他の場合、社員番号を入力させる if "%Dept%"=="その他" ( set /p EmployeeID="社員番号を入力してください: " ) @rem ユーザー名の設定 if "%UserNameFormat%"=="小文字.小文字" ( set UserName=%FirstName%.%LastName% ) else if "%UserNameFormat%"=="大文字.大文字" ( set UserName=%FirstName:~0,1%%LastName:~0,1% ) else if "%UserNameFormat%"=="小文字_小文字" ( set UserName=%FirstName%_%LastName% ) else if "%UserNameFormat%"=="社員番号_小文字" ( set UserName=%EmployeeID%_%LastName% ) else if "%UserNameFormat%"=="BP_小文字" ( set UserName=BP_%LastName% ) @rem 確認メッセージ echo. echo 勤務形態: %WorkplaceType% echo 所属部署: %Dept% echo ユーザー名: %UserName% set /p Confirm="この情報でよろしいですか? (Y/N): " if /i "%Confirm%" neq "Y" ( echo 処理を中止しました。 exit /b 1 ) @rem パスワードの入力と確認 set /p Password="パスワードを入力してください: " set /p PasswordConfirm="確認のため、もう一度パスワードを入力してください: " if not "%Password%"=="%PasswordConfirm%" ( echo パスワードが一致しません。処理を中止しました。 exit /b 1 ) @rem ローカルアカウントの作成 net user %UserName% %Password% /add if %errorlevel% neq 0 ( echo ユーザー作成に失敗しました。 exit /b 1 ) net localgroup administrators %UserName% /add echo ユーザー %UserName% を管理者として作成しました。 @rem 管理者権限に戻す cd C:\Windows\System32 @rem 作成したアカウントのファイルを作成させる runas /user:%UserName% smd PAUSE echo 作成したユーザーのスクリーンセーバーの設定 @rem 本社用PCセットアップのファイルに移動 cd C:\Users\10660_fuse\Downloads\Kitting_Setup_Scripts\config echo パスのコピー後 PAUSE @rem 「スクリーンセーバー用バッチ」を作成したアカウントのデスクトップにコピーする copy ScreenSaver_Config.bat C:\Users\%UserName%\Desktop\ScreenSaver_Config.bat echo 作成ユーザーのデスクトップにコピー後 PAUSE @rem 作成したアカウントでスクリーンセーバー設定を行うバッチを起動する runas /user:%UserName% C:\Users\%UserName%\Desktop\ScreenSaver_Config.bat echo NTPサーバー設定 @rem WindowsTimeサービスを開始する net start w32time @rem NTPサーバーを「ntp1.jst.mfeed.ad.jp」に変更する w32tm /config /manualpeerlist:ntp1.jst.mfeed.ad.jp /update @rem 設定したNTPサーバと時間を同期する w32tm /resync /nowait @rem NTPの状態を確認する w32tm /query /status @rem 確認後キーを何か押す echo. @rem 共通設定が完了した後にインストール処理を開始 echo 共通設定が完了しました。アプリケーションをインストールします。 @rem インストールバッチを選択して呼び出す if "%WorkplaceType%"=="本社勤務" ( if "%Dept%"=="管理部" ( call "C:\Users\10660_fuse\Downloads\Kitting_Setup_Scripts\config\install_admin.bat" ) else ( call "C:\Users\10660_fuse\Downloads\Kitting_Setup_Scripts\config\install_inhouse.bat" ) ) else ( call "C:\Users\10660_fuse\Downloads\Kitting_Setup_Scripts\config\install_outside.bat" ) echo アプリケーションのインストールが完了しました。 echo scanフォルダ作成前 PAUSE @rem 本社勤務かつBP以外の場合にscanフォルダを作成 if "%WorkplaceType%"=="本社勤務" ( if "%Dept%"=="BP" ( echo 本社勤務ですが、BPのため、scanフォルダを作成しません。 ) else ( echo 本社勤務のため、scanフォルダを作成します。 mkdir "C:\Users\%UserName%\Desktop\scan" net share scan="C:\Users\%UserName%\Desktop\scan" /GRANT:everyone,FULL icacls "C:\Users\%UserName%\Desktop\scan" /grant Everyone:(OI)(CI)F /T ) ) else ( echo 本社勤務ではないため、scanフォルダを作成しません。 ) pause
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
if文を調べて調整したりしましたが、変わりませんでした。
しかし、if文を消せばフォルダは作成されるため、今回の問題はif文なんだろうと、考えました。
補足
Windows11Proです。文字コードはANSIです。

回答2件
あなたの回答
tips
プレビュー