管理者権限でDOSプロンプト

●Windows 7
Windows キー
検索ボックスに cmd と入力
Ctrl + Shift + Enter
Alt + Y
Windows キーを押下するとスタートメニューが開く。そのまま cmd と入力すると、検索ボックスでコマンドプロンプトのプログラム (cmd.exe) が検索されて選択される。コマンドプロンプトのプログラム (cmd.exe) を選択している状態で Ctrl + Shift + Enter で開くと管理者権限で実行できる。ユーザーアカウント制御のウィンドウが表示されるので Alt + Y で「はい(Y)」を選択する。そうすると管理者権限でコマンドプロンプトが起動される。

●Windows 8.1
Windows キー + X
A キー
Alt + Y
Windows キーと X キーを入力するとメニューが表示される。その一覧にコマンドプロンプトを管理者で実行する項目があるので A キーを入力することで起動できる。ユーザーアカウント制御のウィンドウが表示されるので Alt + Y で「はい(Y)」を選択する。そうすると管理者権限でコマンドプロンプトが起動される。

●Windows 10
Windows キー + X
A キー
Alt + Y
Windows キーと X キーを入力するとメニューが表示される。その一覧にコマンドプロンプトを管理者で実行する項目があるので A キーを入力することで起動できる。ユーザーアカウント制御のウィンドウが表示されるので Alt + Y で「はい(Y)」を選択する。そうすると管理者権限でコマンドプロンプトが起動される。

7ZIPをDOSプロンプトで使う。

Windows10で、自動でFTP接続をして、持ってきたデータを自動で解凍する。それをやる為に、バッチファイルで苦労をしている。そして、何とか出来上がった。

最初の1は、1番目に実行するって意味でつけました。また、-1は、当日じゃなく、1日前の日付で拾ってくるって意味で付けたものです。

結局は、ある一部のファイルが、ダウンロードしても、0バイトであり、解凍もできない状態で失敗。
ただ、下記のバッチファイルで、今回の様な変なデータじゃなければ簡単にWindowsのバッチファイルでも自動化できる内容になっている。

★1_ftp-1.bat

@echo off
set path=%path%;C:\data
set HOST=ここには、接続サーバー情報
set SCRIPT_FILE=exec.ftp

rem ftpコマンドのファイルを生成
call create_ftp_script-1.bat %HOST%

rem ftpコマンドを実行
ftpp -n -s:%SCRIPT_FILE%
del %SCRIPT_FILE%

★create_ftp_script-1.bat 上のバッチファイルで呼ばれるバッチファイル

@echo off
REM 日付の前日を求める
REM 日付はYYYY/MM/DD 形式とする。結果は環境変数 ans へ返す。
REM 引数がないときは本日とする。
set orgdate=%DATE:/=%

:年月日の分割
set yy=%orgdate:~0,4%
set mm=%orgdate:~4,2%
set dd=%orgdate:~6,2%
:月日の数値化(8進数対策)
set /a mm=1%mm%-100
set /a dd=1%dd%-100

set /a dd=dd-1

if %dd% NEQ 0 goto end

:月跨り処理
set /a mm=mm-1
if %mm% EQU 0 set mm=12&&set /a yy=yy-1

set sub=0030101001010 >sub.bat
set /a dd=31-%%sub:~%mm%,1%% >>sub.bat
call sub.bat

:後処理
if exist sub.bat del sub.bat

:閏年処理
:4で割り切れるか?
set /a u=yy %% 4
if not %u%==0 goto end
:100で割り切れて、400で割り切れないか?
set /a u=yy %% 400
set /a v=yy %% 100
if %v%==0 if not %u%==0 goto end
:2月か?
if %mm% EQU 2 set /a dd=dd+1

:end
set mm=0%mm%
set mm=%mm:~-2%

set dd=0%dd%
set dd=%dd:~-2%

rem下のような、3つの年月が加えられたファイルをダウンロードしようとしている。
set ans1=c023111%yy%%mm%%dd%001.zip
set ans2=c033111%yy%%mm%%dd%001.zip
set ans3=h013111%yy%%mm%%dd%001.zip

@echo off
set HOST=%1
set SCRIPT_FILE=exec.ftp
set FTPUSER=FTPのユーザー情報
set FTPPASSWD=FTPのユーザーPW
set GET_FILE1=%ans1%
set GET_FILE2=%ans2%
set GET_FILE3=%ans3%
set REMOTE_DIR=\

rem FTPスクリプトファイル作成開始
echo open %HOST% > %SCRIPT_FILE%
echo user>> %SCRIPT_FILE%
echo %FTPUSER%>> %SCRIPT_FILE%
echo %FTPPASSWD%>> %SCRIPT_FILE%
echo prompt
echo get %GET_FILE1%>> %SCRIPT_FILE%
echo get %GET_FILE2%>> %SCRIPT_FILE%
echo get %GET_FILE3%>> %SCRIPT_FILE%
echo bye>> %SCRIPT_FILE%

★2_unzip-1.bat

@echo off
REM 日付の前日を求める
REM 日付はYYYY/MM/DD 形式とする。結果は環境変数 ans へ返す。
REM 引数がないときは本日とする。
set orgdate=%DATE:/=%

:年月日の分割
set yy=%orgdate:~0,4%
set mm=%orgdate:~4,2%
set dd=%orgdate:~6,2%
:月日の数値化(8進数対策)
set /a mm=1%mm%-100
set /a dd=1%dd%-100

set /a dd=dd-1

if %dd% NEQ 0 goto end

:月跨り処理
set /a mm=mm-1
if %mm% EQU 0 set mm=12&&set /a yy=yy-1

set sub=0030101001010 >sub.bat
set /a dd=31-%%sub:~%mm%,1%% >>sub.bat
call sub.bat

:後処理
if exist sub.bat del sub.bat

:閏年処理
:4で割り切れるか?
set /a u=yy %% 4
if not %u%==0 goto end
:100で割り切れて、400で割り切れないか?
set /a u=yy %% 400
set /a v=yy %% 100
if %v%==0 if not %u%==0 goto end
:2月か?
if %mm% EQU 2 set /a dd=dd+1

:end
set mm=0%mm%
set mm=%mm:~-2%

set dd=0%dd%
set dd=%dd:~-2%

set ans1=c023111%yy%%mm%%dd%001.zip
set ans2=c033111%yy%%mm%%dd%001.zip
set ans3=h013111%yy%%mm%%dd%001.zip

set GET_FILE1=%ans1%
set GET_FILE2=%ans2%
set GET_FILE3=%ans3%
echo prompt
7za.exe e -pここにはPW %GET_FILE1%
7za.exe e -pここにはPW %GET_FILE2%
7za.exe e -pここにはPW %GET_FILE3%

★3_ftp.bat

@echo off
set path=%path%;C:\data
set HOST=FTPサーバー名が入る
set SCRIPT_FILE=exec.ftp

rem ftpコマンドのファイルを生成
call create_ftp_script.bat %HOST%

rem ftpコマンドを実行
ftpp -n -s:%SCRIPT_FILE%
del %SCRIPT_FILE%

★create_ftp_script.bat 上のバッチファイルで呼ばれるバッチファイル

@echo off
REM 日付の前日を求める
REM 日付はYYYY/MM/DD 形式とする。結果は環境変数 ans へ返す。
REM 引数がないときは本日とする。
set orgdate=%DATE:/=%

:年月日の分割
set yy=%orgdate:~0,4%
set mm=%orgdate:~4,2%
set dd=%orgdate:~6,2%
:月日の数値化(8進数対策)
set /a mm=1%mm%-100
set /a dd=1%dd%-100

set ans1=K0BIZ311K0%yy%%mm%%dd%1.zip
set ans2=SS1001311%yy%%mm%%dd%0.zip

@echo off
set HOST=%1
set SCRIPT_FILE=exec.ftp
set FTPUSER=FTPのユーザー名
set FTPPASSWD=FTPのパスワード
set GET_FILE1=%ans1%
set GET_FILE2=%ans2%
set REMOTE_DIR=\

rem FTPスクリプトファイル作成開始
echo open %HOST% > %SCRIPT_FILE%
echo user>> %SCRIPT_FILE%
echo %FTPUSER%>> %SCRIPT_FILE%
echo %FTPPASSWD%>> %SCRIPT_FILE%
echo prompt
echo get %GET_FILE1%>> %SCRIPT_FILE%
echo get %GET_FILE2%>> %SCRIPT_FILE%
echo bye>> %SCRIPT_FILE%

★4_unzip.bat

@echo off
REM 日付の前日を求める
REM 日付はYYYY/MM/DD 形式とする。結果は環境変数 ans へ返す。
REM 引数がないときは本日とする。
set orgdate=%DATE:/=%

:年月日の分割
set yy=%orgdate:~0,4%
set mm=%orgdate:~4,2%
set dd=%orgdate:~6,2%
:月日の数値化(8進数対策)
set /a mm=1%mm%-100
set /a dd=1%dd%-100

set ans1=K0BIZ311K0%yy%%mm%%dd%1.zip
set ans2=SS1001311%yy%%mm%%dd%0.zip

set GET_FILE1=%ans1%
set GET_FILE2=%ans2%
echo prompt
rem 7zを使って解凍作業
7za.exe e -y -pパスワード %GET_FILE1%
7za.exe e -y -pパスワード %GET_FILE2%

PASSIVE FTP

Windows10プロフェッショナルを使っているが、DOSプロンプトで使用するFTPクライアントは、パッシブモードが使えないらしい。時間をかけて調査してみたが、結局は、海外の有料ソフトを使う事にした。まったく同じように使えるようだ。

http://passive-ftp.com/

なぜ、DOSで動くFTPを探していたかというと、あるサーバーにFTP接続して、特定のファイルをこちら側のサーバーに持ってくるためである。それを自動化させたかったので、このような調べ物をやっていた。

後ほどスクリプトなども記載するが、ちょっと理解できないくらいのもの。結局WindowsのDOS上で動くようなバッチファイルにするしかないのだが、今の時代でバッチファイルを使うのかとおもうと寂しい。GUIで全てできればいいのに。

SQLサーバーも無料版じゃなく有料なら、FTP接続マネージャーなるものがあるようだが、とにかく高い。なので、時間をかけて無料で対応するしかない。