質問:sedを使用しないで改名する方法

このQ&Aのポイント
  • Windows2003 Serverでデータを月1で取得するバッチファイルを使用しているが、セキュリティポリシーでsedの使用が制限されたため、sedを使用せずに改名する方法があるかどうかを教えてください。
  • 現在の仕様は、毎月1日に前月の1日から最新のデータを取得することです。
  • バッチファイルでは、date.txtというファイルに現在の日付を出力し、sedを使用して日付の書式を変更した後、フォルダの作成とデータのコピーを行っています。
回答を見る
  • ベストアンサー

sedを使用しないで改名する方法

Windows2003 Serverでデーターを月1でデーターを取得するバッチファイルを使用しているのですがセキュリティポリシーでマイクロソフトが提供しているソフト、またはWSHかバッチしか使用できなくなり、sedの使用が出来なくなりました。 教えていただきたいのは、sedを使用せず改名をする方法が存在するのでしょうか? 現在の仕様 毎月1日に、前月分の1日から最新のデーターを取得する。 例:10月1日に実行の場合は、9月1日のデーターから最新まで取得 バッチファイル date/t > date.txt sed -e s/\//-/g date.txt > date1.txt sed -e s/[0-9][0-9]//1 -e s/[0-9][0-9]//2 -e s/[0-9][0-9]//2 -e s/-//g date1.txt > date2.txt FOR /F %%Y IN (date2.txt) DO SET YY=%%Y sed -e s/[0-9][0-9]//1 -e s/[0-9][0-9]//1 -e s/[0-9][0-9]//2 -e sed -e s/[0-9][0-9]//1 -e s/[0-9][0-9]//1 -e s/[0-9][0-9]//2 -e s/-//g date1.txt > date3.txt FOR /F %%M IN (date3.txt) DO SET DT=%%M if %YY%%DT%==0901 set MM=12 if %YY%%DT%==0901 set YY=08 if %YY%%DT%==1001 set MM=12 if %YY%%DT%==1001 set YY=09 if %YY%%DT%==1101 set MM=12 if %YY%%DT%==1101 set YY=10 if %DT%==02 set MM=01 if %DT%==03 set MM=02 if %DT%==04 set MM=03 if %DT%==05 set MM=04 if %DT%==06 set MM=05 if %DT%==07 set MM=06 if %DT%==08 set MM=07 if %DT%==09 set MM=08 if %DT%==10 set MM=09 if %DT%==11 set MM=10 if %DT%==12 set MM=11 mkdir c:\%YY%%MM% xcopy C:\"Program Files"\AAA\LOG\MAIN* c:\%YY%%MM% /d:%MM%-01-%YY%

質問者が選んだベストアンサー

  • ベストアンサー
  • pita-gora
  • ベストアンサー率70% (102/145)
回答No.2

提示されているバッチファイルを見ると、sedを使って date /t の出力から年(下2桁)と 月を取得して、それぞれYYとDTに代入し、最終的に1ヶ月前の月をMMに代入しているように 見受けられます(間違っていたらご指摘ください)。 この前提に従ってsedを使わずにバッチだけで記述した場合のサンプルです。 2003 Server での確認ができないのでXPで動作確認しています。 :--------------------------------------------- sample.bat :現在日付の取得("/"の削除) set tmpdate=%date:/=% :計算のためYYYYMMを6桁で取得 set YYYYMM=%tmpdate:~0,6% :前月を求める set /a YYYYMM=YYYYMM-1 :年をまたがる場合 if %YYYYMM:~-2%==00 set /a YYYYMM=YYYYMM - 100 + 12 :YYYYMMから年下2桁と月を取得 set YY=%YYYYMM:~2,2% set MM=%YYYYMM:~-2% mkdir c:\%YY%%MM% xcopy C:\"Program Files"\AAA\LOG\MAIN* c:\%YY%%MM% /d:%MM%-01-%YY%

その他の回答 (1)

  • 6chan
  • ベストアンサー率46% (91/194)
回答No.1

VBScript には、「RegExp」という正規表現用のオブジェクトが用意されています。 wshで、sedに相当するスクリプトを記述できるのではないでしょうか。

関連するQ&A

  • ファイル名の一部に年月日が入っているファイルを、指定日以前のもののみ一

    ファイル名の一部に年月日が入っているファイルを、指定日以前のもののみ一括削除する方法を教えてください。 上記の目的を果たすためにバッチファイルを作成しようと思っているのですが、当方プログラミング全般に関して全くの素人でして、Web検索で見つけたものを切り貼りして無理やり作ったところ、思うような結果になりませんでした。 (BCPフォルダ直下に当該ファイルを置いた場合削除できたが、サブフォルダのファイルは削除できない) どうもあと一歩で完成しそうな気がするので、できればこのバッチファイルを元に修正していただけると嬉しいのですが、VBScript等で作成した方が簡単なのであればバッチファイル以外の方法でも構いません。 宜しくお願い致します。 <予め決められているルール(変更は不可)> (1)2010年9月2日21時21分55秒14に作成されたファイルは、「201009」フォルダ配下に「ABC_DEF_GHI_2010090221215514.txt」と「ABC_DEF_GHI_2010090221215514.log」という名前がつけられる。 (2)1日1回バッチファイルを起動し、指定日以前に作成したファイルを全て削除する。 <作成したバッチファイル(DEL.bat)> @echo off cd ..\BCP REM --------------- REM 日付のn日前を求める REM 引数1・・・n(数値) REM 引数1がないときは1(前日) REM 引数2・・・YYYY/MM/DD 形式 REM 引数2がないときは本日とする。 REM --------------- if "%1"=="" ( set n=5 ) else ( set n=%1 ) if "%2"=="" ( for /F "tokens=1" %%a in ('date /t') do set orgdate=%%a ) else ( set orgdate=%2 ) :年月日の分割 set yy=%orgdate:~0,4% set mm=%orgdate:~5,2% set dd=%orgdate:~8,2% set count=0 :Repeat :月日の数値化(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 /a dd=%dd%+31 if "%mm%"=="2" set /a dd=%dd%-3 if "%mm%"=="4" set /a dd=%dd%-1 if "%mm%"=="6" set /a dd=%dd%-1 if "%mm%"=="9" set /a dd=%dd%-1 if "%mm%"=="11" set /a dd=%dd%-1 :閏年処理 :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 /a count=%count%+1 set DT=ABC_DEF_GHI_%yy%%mm%%dd% IF %count% NEQ %n% goto Repeat for %%F in (*.txt *.log) do if %%F LSS %DT% del /s %%F :EXIT <フォルダ構造> 添付画像をご参照下さい。

  • sedコマンドに関して

    サーバーにあるファイルの中身を置換する為 Tera Termのsedコマンドを使おうとしたのですが 文字列の「'」が置換できません。 以下のように入力してみましたがだめでした。 sed -e 's/'/'aa/g' text1.txt > text2.txt sed -e 's/\'/\'aa/g' text1.txt > text2.txt 出来ないんでしょうか!? 宜しくお願いいたします。

  • cshのsed

    ヤマトです。 cshのsedについて質問します。 環境はRed Had Linux7.2です。 文字列置換でsedを使っています。 置換文字列に'/'が入ってしまう場合正常に動作しません。 原因は分かります。'/'が多いって事ですよね(曖昧な言い方ですみません) どのようにしたら、できるでしょうか? 以下に、サンプルを書きます。 ====SAMPLE.sh(一部抜粋)==== set DATA_DIR = /home/hoge set FILE_NAME = hoge.txt sed "s/__DIR__/$DATA_DIR/g" < FILE_NAME > FILE_NAME.sed ====hoge.txt==== 置換した ディレクトリは __DIR__/です ====hoge.txt.sed(作成したいファイル)==== 置換した ディレクトリは /home/hoge/です どのようにsedしたら良いのでしょうか? 教えて頂けると有り難く思います。宜しくお願いします。

  • 複数のファイルをsedで処理したいけど・・・

    こんにちは。sedでテキストファイルの文字の変換をしています。でも、 001.txt 002.txt 003.txt のように同じ変換をしたいファイルが延々とあります(涙) sed -e 's/a/b/g' 001.txt > 001convert.txt のように一つずつやっているととても大変です。 なのでワイルドカードが使えるかなと sed -e 's/a/b/g' *.txt > *convert.txt とやったら「*convert.txt」というのが一つだけできてしまいました。 変です・・・。 正しくはどのようにコマンドを書けばいいのですか? 教えてください!!

  • sedの正規表現について

    下記のsedコマンド正規表現の意味がわかりません どのような動きをしているのか教えて下さいm(__)m $ file_name="linux.txt" $ echo $file_name | sed -e "s/.*\.\([^.]*\)\$/\1/g" txt

  • シェルから引数を使用してsedコマンドを使用する方法

    テキストファイル内のAという文字を置き換えようと思っています。 シェルから引数渡しでsedコマンドを使用してやろうと思っているのですが、引数渡しの方法をご存知の方がいらっしゃいましたらご教授ください。 具体的には下記のようなことをしようとしております。 sample.txt --- ABC AABBC sample.txt内のAという文字を他の文字に置き換えようと思っています。 hoge.sh 1 として、Aを1に置き換えようと思っています。 hoge.shは、 #! /bin/csh sed -e 's/A/${1}/g' sample.txt >! sample2.txt として実行したところ、引数がうまく拾えず1に置換することができずに困っています。 よろしくお願いします。

  • ザウルスのLinuxでSEDのスクリプトファイルを使いたい

    ザウルス(SLC1000)のターミナル(qpe-embeddedkonsole-ja Ver 1.6.0)で、 SED(sed-ja/GNU sed Ver. 3.02)のスクリプトファイルが使えず困っています。 ----- in.txt ----- 12345 abcde ------------------ +++++ s.sed +++++ 1q +++++++++++++++++ 上記ファイル内容で、ターミナル上で bash-2.05$ sed -e "1q" in.txt は問題なく出力されますが、 bash-2.05$ sed -f s.sed in.txt では、 sed: file s.sed line 1: Extra characters after command と出ます。スクリプトファイルでも["]記号が必要かも知れないと思い s.sed を下記のように変えると +++++ s.sed +++++ "1q" +++++++++++++++++ sed: file s.sed line 1: Unknown command: ”" ” と出ます。 初歩的な何か抜けているのだと思いますが抜け出せずに居ます。 宜しくお願いいたします。 以上

  • バッチファイル IF 複数条件方法

    WindowsXP環境にて下記のバッチファイルがあります。 rem --- 時間変数 --- set yyyy=%date:~-10,4% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% rem --- ログフォルダ変数 --- set LOG_DIR1=D:\LOG rem --- ログファイル変数 --- set LOG_FILE1=LOG.txt set A=1 set B=2 IF %A% == 1 IF %B% == 2 ( echo %yyyy%%mm%/%dd% %HHMMSS%正常終了 >> %LOG_DIR1%\%LOG_FILE1% ) ELSE (echo %yyyy%%mm%/%dd% %HHMMSS%異常終了 >> %LOG_DIR1%\%LOG_FILE1%) pause 上記プログラムだとログ上で【200912/10 正常終了】と表示されるのに、【set A=10】と変更して 【200912/10 異常終了】の表示がログ上に出力されるだろうと期待して実行した結果、 何も表示されてませんでした。 どこに問題があるのでしょうか?

  • バッチファイル 時間変数 短縮化

    バッチファイル 時間変数 短縮化 お世話になっております。 WindowsXP環境にて下記のバッチファイルがあります。 コード-------------------------------------------------------------------------------- set BAT_FILE=TIME.bat set LOG_DIR=D:\test set LOG_FILE=LOG.txt set LOG_FILENAME=%LOG_DIR%\%LOG_FILE% set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set HH=%TIME:~0,2% set MM2=%TIME:~3,2% set SS=%TIME:~6,2% echo %BAT_FILE% 処理日 = %yyyy%%yy%/%mm%/%dd% 第一処理開始時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME% echo. >> %LOG_FILENAME% 処理A(プログラムは省略) set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set HH=%TIME:~0,2% set MM2=%TIME:~3,2% set SS=%TIME:~6,2% echo %BAT_FILE% 処理日 = %yyyy%%yy%/%mm%/%dd% 第一処理終了時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME% echo. >> %LOG_FILENAME% set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set HH=%TIME:~0,2% set MM2=%TIME:~3,2% set SS=%TIME:~6,2% echo %BAT_FILE% 処理日 = %yyyy%%yy%/%mm%/%dd% 第二処理開始時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME% echo. >> %LOG_FILENAME% 処理B(プログラムは省略) set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set HH=%TIME:~0,2% set MM2=%TIME:~3,2% set SS=%TIME:~6,2% echo %BAT_FILE% 処理日 = %yyyy%%yy%/%mm%/%dd% 第二処理終了時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME% echo. >> %LOG_FILENAME% コード-------------------------------------------------------------------------------- 上記プログラム内の処理A及び、処理Bは比較的長い処理である為、その前後の処理時間帯を上記のように時間変数で取ってログに出力されています。 しかし、上記のように最新の処理時間帯をわざわざ何行もある各時間変数を宣言して取得するのはプログラム的に長くなってしまい、かつ醜いです。 上記方法以外に時間変数のスッキリとした取得方法は無いのでしょうか? ご存知の方がいれば、ご教授願いますでしょうか? 何卒宜しくお願い致します。

  • sedなんですが…

    perlのことでなくて済みません、が、sedのこととも共通している のではないかと思い、質問させていただきます。 WindowsNT4.0で、アスキーのMS-DOS SoftwareToolsに入っていた sedを今まで使っていましたが、長いファイル名が使えないので sed32に切り替えようとしていますが、エスケープ文字を判断し てくれないようで困っています。 以下に実行例を示します。 C:\TEMP\call>sed32 -V GNU sed version 3.02 + multi-byte extension 1.07 Copyright (C) 1998 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, to the extent permitted by law. C:\TEMP\call>sed32.exe -e"s/\t/TAB/g" e2.txt > e2.out e2.txtの内容 ------------------------------------------- select SWK_DENDATE "計上日付", SWK_DENNO "伝票番号", SWK_MCN_CODE "資産code", '' "資産名", nvl(SWK_GYOTEK, SWK_TEK) "摘要", ------------------------------------------- e2.outの内容 ------------------------------------------- selecTAB SWK_DENDATE "計上日付", SWK_DENNO "伝票番号", SWK_MCN_CODE "資産code", '' "資産名", nvl(SWK_GYOTEK, SWK_TEK) "摘要", ------------------------------------------- タブを"TAB"に置換せずに、"select"の"t"が"TAB"に置換されています。 しばらくこの手のtoolを使っていなかったので、よく分からない のですが、どこか使い方が間違っているのでしょうか? それとも、GNU sedの仕様なのでしょうか? SoftwareToolsでは問題ありませんでした。

    • ベストアンサー
    • Perl